コンテンツにスキップ

利用者:SeitenBot/user-fixes.py

このページに記載されているすべてのスクリプトはCC0 1.0 全世界で利用可能です。[1]

オリンピック関連記事一斉改名後のリンク修正[編集]

# -*- coding: utf-8 -*-
# 試作中

from __future__ import unicode_literals

fixes['olympic'] = {
    'regex': True,
    'msg': {
        'ja': 'オリンピック関連記事一斉改名後のリンク修正',
    },
    'replacements': [
        # 不要な空白文字を除去
        (r"\[\[\s+([^]#|\s]+)\s*(?=[]#|])", r"[[\1"),
        (r"\[\[\s*([^]#|\s]+)\s+(?=[]#|])", r"[[\1"),
        
        # パイプなしのリンクを一旦[[A|A]]のように置き換え
        (r"(?i)\[\[(?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:|:?ファイル:|:?File:|:?画像:)([^]|#]+)\]\]", r"[[\1|\1]]"),
        
        # 箇条書きかつ文の一部になっていないと判断できるものについては元に戻す
        (r"(?m)^([*#]+\s?)\[\[([^]|]+)\|\2\]\](?=\s)", r"\1[[\2]]"),
        
        # {{Main}}や{{See}}などによるリンクを修正するための一時的な置換。例えば{{Main|A}}は{{Main|[[A]]}}に置き換わる
        (r"{{\s*([Mm]ain(?: ?article)?|[Ff]urther(?: information|2)?|[Dd]etails|本文|[Mm]ore|[S]see(?: ?also)?|[Vv]edi anche|[Aa]lso)\s*\|\s*(?:1=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*(?:\|\s*(?:2=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:3=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:4=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:5=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:6=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:7=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:8=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:9=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:10=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:11=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:12=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:13=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:14=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?(?:\|\s*(?:15=)?\s*(?:\[\[)?(.*?)(?:\]\])?\s*)?}}", r"{{\1|[[\2]]|[[\3]]|[[\4]]|[[\5]]|[[\6]]|[[\7]]|[[\8]]|[[\9]]|[[\10]]|[[\11]]|[[\12]]|[[\13]]|[[\14]]|[[\15]]|[[\16]]}}"),
        (r"{{\s*([Mm]ain2)\s*\|\s*(?:1=)?\s*(.*?)\s*\|\s*(?:2=)?\s*(?:\[\[)?(.*?)(?:\]\])?(?:\|\s*(?:3=)?\s*(.*?)\s*\|\s*(?:4=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:5=)?\s*(.*?)\s*\|\s*(?:6=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:7=)?\s*(.*?)\s*\|\s*(?:8=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:9=)?\s*(.*?)\s*\|\s*(?:10=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:11=)?\s*(.*?)\s*\|\s*(?:12=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:13=)?\s*(.*?)\s*\|\s*(?:14=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:15=)?\s*(.*?)\s*\|\s*(?:16=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:17=)?\s*(.*?)\s*\|\s*(?:18=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?(?:\|\s*(?:19=)?\s*(.*?)\s*\|\s*(?:20=)?\s*(?:\[\[)?(.*?)(?:\]\])?)?}}", r"{{\1|\2|[[\3]]|\4|[[\5]]|\6|[[\7]]|\8|[[\9]]|\10|[[\11]]|\12|[[\13]]|\14|[[\15]]|\16|[[\17]]|\18|[[\19]]|\20|[[\21]]}}"),
        
        # 「東京五輪」や「ミュンヘン・オリンピック」のようなリダイレクトへリンクしているものを修正
        (r"\[\[(?P<city>セントルイス|ストックホルム|アントワープ|アムステルダム|ベルリン|前?東京|ヘルシンキ|メルボルン|ローマ|メキシコ(シティー?)?|ミュンヘン|モントリオール|モスクワ|ソウル|バルセロナ|アトランタ|シドニー|北京|リオ(・?デ・?ジャネイロ)?|シャモニー(・モンブラン)?|ガルミッシュ・パルテンキル(ヘ|ヒェ)ン|札幌|コル(チ|ティ)ナ・ダンペッツ[オォ]|オスロ|スコーバレー|グルノーブル|サラエ(ボ|ヴォ)|カルガリー|アルベール(ビ|ヴィ)ル|リレハンメル|長野|ソルトレ[ーイ]クシティ|トリノ|バンクーバー|ソチ|平昌|アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レ[ーイ]クプラシッド|インスブルック)(?:五輪|・オリンピック)(?=[]|#])", r"[[\g<city>オリンピック"),
        
        # 「○○オリンピック (YYYY年)」→「YYYY年○○オリンピック」
        (r"\[\[(?P<city>セントルイス|ストックホルム|アントワープ|アムステルダム|ベルリン|前?東京|ヘルシンキ|メルボルン|ローマ|メキシコ(シティー?)?|ミュンヘン|モントリオール|モスクワ|ソウル|バルセロナ|アトランタ|シドニー|北京|リオ(・?デ・?ジャネイロ)?|シャモニー(・モンブラン)?|ガルミッシュ・パルテンキル(ヘ|ヒェ)ン|札幌|コル(チ|ティ)ナ・ダンペッツ[オォ]|オスロ|スコーバレー|グルノーブル|サラエ(ボ|ヴォ)|カルガリー|アルベール(ビ|ヴィ)ル|リレハンメル|長野|ソルトレ[ーイ]クシティ|トリノ|バンクーバー|ソチ|平昌|アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レ[ーイ]クプラシッド|インスブルック)オリンピック(?:\s?[((](?P<year>\d{4}年)[))]\s?)", r"[[\g<year>\g<city>オリンピック"),
        
        # 個別対処
        (r"\[\[(長野|札幌|カルガリー)冬季オリンピック(?=[]|#])", r"[[\1オリンピック"),
        (r"\[\[メルボルンオリンピックにおけるニセ聖火リレー事件", r"[[1956年メルボルンオリンピックのニセ聖火リレー事件"),
        (r"\[\[アテネオリンピックの聖火リレー", r"[[2004年アテネオリンピックの聖火リレー"),
        (r"\[\[アテネオリンピックバレーボール世界最終予選", r"[[2004年アテネオリンピックのバレーボール競技・世界最終予選"),
        (r"\[\[アテネオリンピック女子バスケットボール日本代表", r"[[2004年アテネオリンピックのバスケットボール競技・女子日本選手団"),
        (r"\[\[アテネオリンピック野球オーストラリア代表", r"[[2004年アテネオリンピックの野球競技・オーストラリア代表"),
        (r"\[\[アテネオリンピック野球キューバ代表", r"[[2004年アテネオリンピックの野球競技・キューバ代表"),
        (r"\[\[アテネオリンピック野球日本代表", r"[[2004年アテネオリンピックの野球競技・日本代表"),
        (r"\[\[リオデジャネイロオリンピック難民選手団", r"[[2016年リオデジャネイロオリンピックの難民五輪選手団"),
        (r"\[\[2020年東京オリンピック・パラリンピック文化プログラム", r"[[2020年東京オリンピック・パラリンピックの文化プログラム"),
        (r"\[\[2020年東京オリンピック・レガシー", r"[[2020年東京オリンピックのレガシー"),
        (r"\[\[長野オリンピック滑降競技場設営問題", r"[[1998年長野オリンピックの滑降競技場設営問題"),
        (r"\[\[ソルトレイクシティオリンピックにおけるフィギュアスケート・スキャンダル", r"[[2002年ソルトレークシティオリンピックのフィギュアスケート・スキャンダル"),
        (r"\[\[オリンピック個人参加選手団", r"[[2000年シドニーオリンピックの個人参加選手団"),
        (r"\[\[オリンピックメダリスト一覧", r"[[オリンピックのメダリスト一覧"),
        (r"\[\[オリンピック招致", r"[[オリンピックの開催地選考"),
        (r"\[\[オリンピック公式記録映画一覧", r"[[オリンピックの公式記録映画一覧"),
        (r"\[\[オリンピック開会宣言者一覧", r"[[オリンピックの開会宣言者一覧"),
        (r"\[\[コビー \(バルセロナオリンピック\)", r"[[コビー (マスコットキャラクター)"),
        (r"\[\[1908年のオリンピックサッカー競技", r"[[1908年ロンドンオリンピックのサッカー競技"),
        (r"\[\[パリオリンピック日本選手団", r"[[1924年パリオリンピックの日本選手団"),
        (r"\[\[ロサンゼルスオリンピック (1984) における自転車競技", r"[[1984年ロサンゼルスオリンピックの自転車競技"),
        (r"\[\[ロサンゼルスオリンピック野球日本代表", r"[[1984年ロサンゼルスオリンピックの野球競技・日本代表"),
        (r"\[\[シドニーオリンピックにおける(アーチェリー|ウエイトリフティング|カヌー|セーリング|ソフトボール|テコンドー|トライアスロン|ハンドボール|バスケットボール|バドミントン|バレーボール|フェンシング|レスリング|卓球|射撃|柔道|野球|馬術)(?=[]|#])", r"[[2000年シドニーオリンピックの\1競技"),
        (r"\[\[シドニーオリンピック野球大韓民国代表", r"[[2000年シドニーオリンピックの野球競技・韓国代表"),
        (r"\[\[アテネオリンピックにおけるバレーボール競技", r"[[2004年アテネオリンピックのバレーボール競技"),
        (r"\[\[アテネオリンピック日本選手団", r"[[2004年アテネオリンピックの日本選手団"),
        (r"\[\[北京オリンピック柔道競技", r"[[2008年北京オリンピックの柔道競技"),
        (r"\[\[北京オリンピック開会式", r"[[2008年北京オリンピックの開会式"),
        (r"\[\[北京オリンピック野球大韓民国代表", r"[[2008年北京オリンピックの野球競技・韓国代表"),
        
        # 競技や選手団などのフォーマットを調整
        (r"(?i)\[\[(?!オリンピック(?:混合チーム|独立参加|個人参加|難民)|:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)((?:[^]|#]*?)(?!ユース)オリンピック)([^]|#]+?選手団)", r"[[\1の\2"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)(?:における)?([^]|#]+?競技)(?=[]|#])", r"[[\1の\2"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)における([^]|#]+?競技)・?([^]|#]*?)(?:種目)?", r"[[\1の\2・\3"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)での国・地域別メダル受賞数一覧", r"[[\1のメダル受賞数一覧"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)(男子|女子)?(バスケットボール|野球)([^]|#]+?)代表", r"[[\1の\3競技・\2\4選手団"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)(サッカー|バレーボール|野球|バスケットボール)(?:競技)? ?([^]|#]+?)予選 ?", r"[[\1の\2競技・\3予選"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)の放送事業者の一覧", r"[[\1の放送事業者一覧"),
        (r"(?i)\[\[((?!:?Category:|:?カテゴリ:|:?Template:|:?テンプレート:)(?:[^]|#]*?)(?!ユース)オリンピック)(.+?競技)メダリスト一覧(?: \((男子|女子|廃止種目)\))?", r"[[\1の\2・\3メダリスト一覧"),
        
        # 大会名を修正
        (r"\[\[セントルイスオリンピック(?=[]|#の])", r"[[1904年セントルイスオリンピック"),
        (r"\[\[ストックホルムオリンピック(?=[]|#の])", r"[[1912年ストックホルムオリンピック"),
        (r"\[\[アントワープオリンピック(?=[]|#の])", r"[[1920年アントワープオリンピック"),
        (r"\[\[アムステルダムオリンピック(?=[]|#の])", r"[[1928年アムステルダムオリンピック"),
        (r"\[\[ベルリンオリンピック(?=[]|#の])", r"[[1936年ベルリンオリンピック"),
        (r"\[\[ヘルシンキオリンピック(?=[]|#の])", r"[[1952年ヘルシンキオリンピック"),
        (r"\[\[メルボルンオリンピック(?=[]|#の])", r"[[1956年メルボルンオリンピック"),
        (r"\[\[ローマオリンピック(?=[]|#の])", r"[[1960年ローマオリンピック"),
        (r"\[\[前?東京オリンピック(?=[]|#の])", r"[[1964年東京オリンピック"),
        (r"\[\[メキシコ(シティー?)?オリンピック(?=[]|#の])", r"[[1968年メキシコシティーオリンピック"),
        (r"\[\[メキシコシティオリンピック(?=[]|#の])", r"[[1968年メキシコシティーオリンピック"),
        (r"\[\[ミュンヘンオリンピック(?=[]|#の])", r"[[1972年ミュンヘンオリンピック"),
        (r"\[\[モントリオールオリンピック(?=[]|#の])", r"[[1976年モントリオールオリンピック"),
        (r"\[\[モスクワオリンピック(?=[]|#の])", r"[[1980年モスクワオリンピック"),
        (r"\[\[ソウルオリンピック(?=[]|#の])", r"[[1988年ソウルオリンピック"),
        (r"\[\[バルセロナオリンピック(?=[]|#の])", r"[[1992年バルセロナオリンピック"),
        (r"\[\[アトランタオリンピック(?=[]|#の])", r"[[1996年アトランタオリンピック"),
        (r"\[\[シドニーオリンピック(?=[]|#の])", r"[[2000年シドニーオリンピック"),
        (r"\[\[北京オリンピック(?=[]|#の])", r"[[2008年北京オリンピック"), # 議論中(2017年9月8日現在)
        (r"\[\[リオ(・?デ・?ジャネイロ)?オリンピック(?=[]|#の])", r"[[2016年リオデジャネイロオリンピック"),
        (r"\[\[2020年夏季オリンピック(?=\|(2020年?)?東京)", r"[[2020年東京オリンピック"),
        (r"\[\[2020年夏季オリンピックの(?!開催地選考)", r"[[2020年東京オリンピックの"),
        (r"\[\[シャモニーオリンピック(?=[]|#の])", r"[[1924年シャモニー・モンブランオリンピック"),
        (r"\[\[1932年レイクプラシッドオリンピック(?=[]|#の])", r"[[1932年レークプラシッドオリンピック"),
        (r"\[\[ガルミッシュパルテンキル(ヒェ|ヘ)ンオリンピック(?=[]|#の])", r"[[1936年ガルミッシュ・パルテンキルヘンオリンピック"),
        (r"\[\[1944年コルティナダンペッツォオリンピック(?=[]|#の])", r"[[1944年コルチナ・ダンペッツオオリンピック"),
        (r"\[\[オスロオリンピック(?=[]|#の])", r"[[1952年オスロオリンピック"),
        (r"\[\[コルティナダンペッツォオリンピック(?=[]|#の])", r"[[1956年コルチナ・ダンペッツオオリンピック"),
        (r"\[\[スコーバレーオリンピック(?=[]|#の])", r"[[1960年スコーバレーオリンピック"),
        (r"\[\[グルノーブルオリンピック(?=[]|#の])", r"[[1968年グルノーブルオリンピック"),
        (r"\[\[札幌オリンピック(?=[]|#の])", r"[[1972年札幌オリンピック"),
        (r"\[\[サラ(エ|イェ)(ヴォ|ボ)オリンピック(?=[]|#の])", r"[[1984年サラエボオリンピック"),
        (r"\[\[カルガリーオリンピック(?=[]|#の])", r"[[1988年カルガリーオリンピック"),
        (r"\[\[アルベール(ビ|ヴィ)ルオリンピック(?=[]|#の])", r"[[1992年アルベールビルオリンピック"),
        (r"\[\[リレハンメルオリンピック(?=[]|#の])", r"[[1994年リレハンメルオリンピック"),
        (r"\[\[長野オリンピック(?=[]|#の])", r"[[1998年長野オリンピック"),
        (r"\[\[ソルトレ[ーイ]クシティオリンピック(?=[]|#の])", r"[[2002年ソルトレークシティオリンピック"),
        (r"\[\[トリノオリンピック(?=[]|#の])", r"[[2006年トリノオリンピック"),
        (r"\[\[バンクーバーオリンピック(?=[]|#の])", r"[[2010年バンクーバーオリンピック"),
        (r"\[\[ソチオリンピック(?=[]|#の])", r"[[2014年ソチオリンピック"),
        (r"\[\[平昌オリンピック(?=[]|#の])", r"[[2018年平昌オリンピック"),
        (r"\[\[2022年夏季オリンピック(?=\|(2022年?)?北京)", r"[[2022年北京オリンピック"),
        (r"\[\[2022年北京オリンピックの(?!開催地選考)", r"[[2022年北京オリンピックの"),
        
        # 「YYYY年[[YYYY年○○オリンピック|○○オリンピック]]」→「[[YYYY年○○オリンピック]]」
        (r"(?:\[\[)?(?P<year>\d{4})年(?:\]\])?\[\[(?P=year)年(?P<city>セントルイス|ストックホルム|アントワープ|アムステルダム|ベルリン|東京|ヘルシンキ|メルボルン|ローマ|メキシコシティー|ミュンヘン|モントリオール|モスクワ|ソウル|バルセロナ|アトランタ|シドニー|北京|リオデジャネイロ|シャモニー・モンブラン|ガルミッシュ・パルテンキルヘン|札幌|コルチナ・ダンペッツオ|オスロ|スコーバレー|グルノーブル|サラエボ|カルガリー|アルベールビル|リレハンメル|長野|ソルトレークシティ|トリノ|バンクーバー|ソチ|平昌|アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レークプラシッド|インスブルック)オリンピック\|(?:(?P=year)年)?(?P=city)オリンピック\]\]", r"[[\g<year>年\g<city>オリンピック]]"),
        
        # 曖昧さ回避を試みる
        (r"(?:\[\[)?(?P<year>\d{4})年(?:\]\])?\[\[(?P<city>アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レークプラシッド|インスブルック)オリンピック\|(?P=city)オリンピック\]\]", r"[[\g<year>年\g<city>オリンピック]]"),
        (r"((?:\[\[)?(?P<year>\d{4})年(?:\]\])?(?:(.+?))?の)\[\[(?P<city>アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レークプラシッド|インスブルック)オリンピック([]|#])", r"\1[[\g<year>年\g<city>オリンピック\3"),
        (r"\[\[(?P<city>アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レークプラシッド|インスブルック)オリンピック((?:#.+?)?(?:|.+?)?)?\]\](?=\s?[((](?:\[\[)?(?P<year>\d{4})年(?:\]\])?[))])", r"[[\g<year>年\g<city>オリンピック\3]]"),
        (r"\[\[アテネオリンピック(?=\|(1896|1906|2004))", r"[[\1年アテネオリンピック"),
        (r"\[\[パリオリンピック(?=\|(1900|1924|2024))", r"[[\1年パリオリンピック"),
        (r"\[\[ロンドンオリンピック(?=\|(1908|1944|1948|2012))", r"[[\1年ロンドンオリンピック"),
        (r"\[\[ロサンゼルスオリンピック(?=\|(1932|1984|2028))", r"[[\1年ロサンゼルスオリンピック"),
        (r"\[\[サンモリッツオリンピック(?=\|19(28|48))", r"[[\1年サンモリッツオリンピック"),
        (r"\[\[レークプラシッドオリンピック(?=\|19(32|80))", r"[[\1年レークプラシッドオリンピック"),
        (r"\[\[インスブルックオリンピック(?=\|19(64|76)", r"[[\1年インスブルックオリンピック"),
        
        # 要曖昧さ回避
        (r"\[\[(?P<city>アテネ|パリ|ロンドン|ロサンゼルス|サンモリッツ|レークプラシッド|インスブルック)オリンピック((?:#.+?)?(?:|.+?)?)?\]\]", r"[[\g<city>オリンピック\2]]<noinclude>{{要曖昧さ回避|{{subst:DATE}}}}</noinclude><!-- Botによる貼り付け -->"),
        
        # [[A|A]]のような形のリンクを[[A]]に戻す
        (r"\[\[([^]#]+)\|\1\]\]", r"[[\1]]"),
        
        # {{Main}}や{{See}}などの内部のリンクを角括弧を使わない形に戻す
        (r"{{([Mm]ain(?: ?article)?|[Ff]urther(?: information|2)?|[Dd]etails|本文|[Mm]ore|[S]see(?: ?also)?|[Vv]edi anche|[Aa]lso)\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]\|\[\[(.*?)\]\]}}", r"{{\1|\2|\3|\4|\5|\6|\7|\8|\9|\10|\11|\12|\13|\14|\15|\16}}"),
        (r"{{([Mm]ain2)\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]\|(.*?)\|\[\[(.*?)\]\]}}", r"{{\1|\2|\3|\4|\5|\6|\7|\8|\9|\10|\11|\12|\13|\14|\15|\16|\17|\18|\19|\20|\21}}"),
        (r"{{([Mm]ain(?: ?article|2)?|[Ff]urther(?: information|2)?|[Dd]etails|本文|[Mm]ore|[S]see(?: ?also)?|[Vv]edi anche|[Aa]lso)\|(.*?)\|+\}\}", r"{{\1|\2}}"),
    ]
    'exceptions': {
        'inside-tags': [
            'comments',
            'code',
        ],
        'title': [
            r'/(sandbox|testcases)',
        ],
    }
}

fixes['olympic-linktext'] = {
    'regex': True,
    'msg': {
        # メッセージ無し(リンクテキストを書き換えるだけの作業は想定していないため)
    },
    'replacements': [
        (r'(\[\[1968年メキシコシティオリンピック(?:の.+?)\|.*)メキシコシティ', r'\1メキシコシティー'),
        (r'(\[\[1924年シャモニー・モンブランオリンピック(?:の.+?)\|.*)シャモニー', r'\1シャモニー・モンブラン'),
        (r'(\[\[1924年ガルミッシュ・パルテンキルヘンオリンピック(?:の.+?)\|.*)ガルミッシュパルテンキルヒェン', r'\1ガルミッシュ・パルテンキルヘン'),
        (r'(\[\[19(?:44|56)年コルチナ・ダンペッツオオリンピック(?:の.+?)\|.*)コルティナダンペッツォ', r'\1コルチナ・ダンペッツオ'),
        (r'(\[\[2002年ソルトレークシティオリンピック(?:の.+?)\|.*)ソルトレイクシティ', r'\1ソルトレークシティ'),
        (r"\[\[([^]#]+)\|\1\]\]", r"[[\1]]"),
    ],
    'exceptions': {
        'inside-tags': [
            'comments',
            'code',
        ],
        'inside': [
            r'(?s)「.+?」',
            r"'''.+?'''",
            r"''.+?''",
            r'(?is)<i>.+?</i>'
            r'(?is)<b>.+?</b>'
            r'(?is)<em>.+?</em>'
            r'(?is)<strong>.+?</strong>'
            r'(?is)<q>.+?</q>'
            r'(?is)<blockquote>.+?</blockquote>'
            r'(?s){{\s[^|]*([Qq]uot|引用).+?}}'
        ],
        'title': [
            r'/(sandbox|testcases)',
        ],
    }
}

鉄道関連記事Infoboxの事業者等の欄からのアイコン画像の削除[編集]

# -*- coding: utf-8 -*-

from __future__ import unicode_literals
import re
import mwparserfromhell  # [http://mwparserfromhell.readthedocs.io/en/latest/index.html]

def botr20180224(match):    
    wikicode = mwparserfromhell.parse(match.string)
    target = {"Infobox 列車名": ["地域", "運営者", "前身", "後継", "旧運営者", "線路所有者", "使用路線"],
        "列車名": ["運行者", "経由線区", "線路所有者"],
        "Infobox 鉄道路線": ["所在地", "所有者", "運営者"],
        "Infobox rail line": ["locale", "owner", "operator"],
        "駅情報": ["所属事業者", "所属路線", "乗換"],
        }
    pattern = re.compile(r"\[\[\s*(File|ファイル|画像).+?\]\]\s*", re.I)
    
    for template in wikicode.filter_templates():
        for target_template in target:
            if (template.name.matches(target_template)):
                for param in target[target_template]:
                    try:
                        value = template.get(param).value
                        if not value:
                            continue
                        value.replace(value, re.sub(pattern, "", str(value)))
                    except ValueError:
                        pass
    
    return str(wikicode)

fixes['botr20180224'] = {
    'regex': True,
    'replacements': [
        (r'(?s).+', botr20180224),  # 本文全体を自作関数に渡す
    ],
}

鉄道関連記事Infoboxの事業者等の欄からのアイコン画像の削除(その2)[編集]

# -*- coding: utf-8 -*-

from __future__ import unicode_literals
import re
import pywikibot
import mwparserfromhell  # [http://mwparserfromhell.readthedocs.io/en/latest/index.html]

def botr20180513(match):
    pattern = re.compile(r"\[\[\s*(File|ファイル|画像).+?\]\]\s*", re.I)
    
    try:
        wikicode = mwparserfromhell.parse(match.string)
        for template in wikicode.filter_templates():
            if template.name.matches(("駅情報", "駅情報/韓国")):
                for param in template.params:
                    if param.name.startswith(("所属事業者", "所属路線")):
                        value = param.value
                        value.replace(value, re.sub(pattern, "", str(value)))
        return str(wikicode)
    except Exception as e:
        pywikibot.output("Error!")
        pywikibot.output(e)
        return match.string

fixes['botr20180513'] = {
    'regex': True,
    'replacements': [
        (r'(?s).+', botr20180513),  # 本文全体を自作関数に渡す
    ],
}

Template:Cite doiの廃止に向けた移行作業[編集]

# -*- coding: utf-8 -*-

from __future__ import unicode_literals
import re
import pywikibot
import urllib.request
from urllib.error import URLError
import urllib.parse

def doiweb(match):
    doi = match.group(1).strip()
    url = 'https://reftag.appspot.com/doiweb.py?doi=' + urllib.parse.quote(doi)
    pattern = re.compile(r'&gt;({{cite journal.+?}})&lt;')
    try:
        with urllib.request.urlopen(url) as f:
            text = str(f.read(), encoding='utf-8')
            m = re.search(pattern, text)
            if m:
                return m.group(1)
            else:
                pywikibot.error("re.search() failed.")
                pywikibot.log(text)
    except URLError as e:
        pywikibot.error("URLError: ", newline=False)
        pywikibot.error(e.reason)
    except UnicodeError as e:
        pywikibot.error("UnicodeError: ", newline=False)
        pywikibot.error(e.reason)
    return match.group(0)

fixes['doiweb'] = {
    'regex': True,
    'replacements': [
        (r'(?s){{\s*[Cc]ite[ _](?:doi|DOI)\s*?\|(?: ?1=)?([^|}]+)(?:\|[^|}]*?)?}}', doiweb),
    ],
}

Template:Cite pmidの廃止に向けた移行作業[編集]

# -*- coding: utf-8 -*-

from __future__ import unicode_literals
import re
import pywikibot
import urllib.request
from urllib.error import URLError
import urllib.parse

def pmid(match):
    pmid = match.group(1).strip()
    url = 'https://tools.wmflabs.org/citation-template-filling/cgi-bin/index.cgi?ddb=&type=pubmed_id&id={}&add_text_url=1'.format(urllib.parse.quote(pmid))
    pattern = re.compile(r'>({{cite journal.+?}})<')
    try:
        with urllib.request.urlopen(url) as f:
            text = str(f.read(), encoding='utf-8')
            m = re.search(pattern, text)
            if m:
                return m.group(1)
            else:
                pywikibot.error("re.search() failed.")
                pywikibot.log(text)
    except URLError as e:
        pywikibot.error("URLError: ", newline=False)
        pywikibot.error(e.reason)
    except UnicodeError as e:
        pywikibot.error("UnicodeError: ", newline=False)
        pywikibot.error(e.reason)
    return match.group(0)

fixes['pmid'] = {
    'regex': True,
    'replacements': [
        (r'(?s){{\s*(?:[Cc]ite[ _](?:pmid|PMID)|[Pp]mid)\s*?\|(?: ?1=)?([^|}]+)(?:\|[^|}]*?)?}}', pmid),
    ],
}