def get_cleaned_data(): key_value = get_basic_info() # https://docs.python.org/ja/3/library/re.html#re.sub # (?:...) # 普通の丸括弧の、キャプチャしない版です。丸括弧で囲まれた正規表現にマッチしますが、このグループがマッチした部分文字列は、マッチを実行したあとで回収することも、そのパターン中で以降参照することも できません 。 # 文字列型 repl 引数では、上で述べた文字エスケープや後方参照に加えて、 # \g<name> は (?P<name>...) 構文で定義された name という名前のグループがマッチした部分文字列を使い、 # \g<number> は対応するグループ番号を使います。よって \g<2> は \2 と等価ですが、 \g<2>0 のような置換 # においても曖昧になりません。 \20 は、グループ 20 への参照として解釈され、グループ 2 への参照にリテラル文字 # '0' が続いたものとしては解釈されません。後方参照 \g<0> は正規表現とマッチした部分文字列全体で置き換わります。 # *?, +?, ?? # '*' 、 '+' 、および '?' 修飾子は全て 貪欲 (greedy) マッチで、できるだけ多くのテキストにマッチします。この挙動が望ましくない時もあります。例えば正規表現 <.*> が '<a> b <c>' に対してマッチされると、 '<a>' だけでなく文字列全体にマッチしてしまいます。修飾子の後に ? を追加すると、 非貪欲 (non-greedy) あるいは 最小 (minimal) のマッチが行われ、できるだけ 少ない 文字にマッチします。正規表現 <.*?> を使うと '<a>' だけにマッチします。 # [^\]]+ # [^5] は '5' を除くあらゆる文字にマッチ pattern1 = re.compile( r''' \[\[ (?:[^\]]+\|) (.+?) \]\] ''', re.VERBOSE) #('元首等肩書', '[[イギリスの君主|女王]]')) #→[[女王]] #('元首等肩書', '女王'), ('元首等肩書', '[[イギリスの君主|女王]]')) # (('確立形態3', '1800年連合法)'), ('確立形態3', '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])')) # pattern2 = re.compile( r''' \[\[ (.+?) \]\] ''', re.VERBOSE) #(('確立形態3', 'グレートブリテン及びアイルランド連合王国建国<br />(連合法 (1800年)|1800年連合法)'), ('確立形態3', '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])')) # https://qiita.com/hidei/items/05634f810212e8ce0870 # re.sub(r'(hoge)', '\\1bar', 'hogefoo') # re.sub(r'(第)三', '\g<1>3', '第三') # zip(result, key_value) result1 = [(key, re.sub(r'\'\'+', '', value)) for (key, value) in key_value] result2 = [(key, re.sub(pattern1, "\g<1>", value)) for (key, value) in result1] # value = 'abcde' # patten1 = r'a(bcd)e' # \g<1> = "bcd" # results = "bcd" result3 = [(key, re.sub(pattern2, "\g<1>", value)) for (key, value) in result2] # (('国章リンク', '(国章)'), ('国章リンク', '([[イギリスの国章|国章]])')) # print('\n'.join(map(str, zip(result3, key_value)))) return result3
# coding: utf-8 import re from q25 import get_basic_info def remove_emphasis_expression(text): return re.sub(r'(\'{2,3}|\'{5})(.+?)\1', r'\2', text) if __name__ == '__main__': with open('britain.txt', 'r') as f: text = f.read() d = get_basic_info(text) res = {k: remove_emphasis_expression(v) for k, v in d.items()} print(res)
# coding: utf-8 import urllib.parse import urllib.request import json from q25 import get_basic_info if __name__ == '__main__': with open('britain.txt', 'r') as f: text = f.read() d = get_basic_info(text) params_str = urllib.parse.urlencode({ 'action': 'query', 'prop': 'imageinfo', 'titles': 'File:{0}'.format(d['国旗画像']), 'iiprop': 'url', 'format': 'json' }) with urllib.request.urlopen('https://www.mediawiki.org/w/api.php?{0}'.format(params_str)) as response: res = json.loads(response.read().decode('utf-8'))['query']['pages']['-1']['imageinfo'][0]['url'] print(res)
""" 26. 強調マークアップの除去 25の処理時に,テンプレートの値からMediaWikiの強調マークアップ(弱い強調,強調,強い強調のすべて)を除去してテキストに変換せよ(参考: マークアップ早見表). 他との区別(斜体) ''他との区別'' 強調(太字) '''強調''' 斜体と強調 '''''斜体と強調''''' https://ja.wikipedia.org/wiki/Help:%E6%97%A9%E8%A6%8B%E8%A1%A8 """ from q25 import get_basic_info import re key_value = get_basic_info() result = [(key, re.sub(r'\'\'+', '', value)) for (key, value) in key_value] print('\n'.join(map(str, result))) # https://uxmilk.jp/8662