2018年03月13日

言語処理100本ノックでPython入門 #24 - 正規表現のcompile

  

本日は、言語処理100本ノック 2015の問題24です。

■ 問題


問題20で作成したファイルを入力として、以下の問題を解きます。
24. ファイル参照の抽出 
記事から参照されているメディアファイルをすべて抜き出せ.

■ Pythonのコード
import json
import re

def readArticle(filename): with open(filename, 'r', encoding='utf8') as fin: return fin.read()
def getMediaFfiles(article): reg = re.compile(r'(?:File|ファイル):([^\|]+)\|') for s in article.split('\n'): m = reg.search(s) if m: yield m.group(1)
def main(): article = readArticle('england-article.txt') for name in getMediaFfiles(article): print(name)
if __name__ == '__main__': main()

'england-article.txt'は問題20で作成したファイルです。これを入力ファイルとしています。


■ 正規表現


今回は、以下のような正規表現を書いたわけですが、

r'(?:File|ファイル):([^\|]+)\|'
?: は、後方参照の対象にはならないので、(?:File|ファイル) の部分は m.group(n)での参照対象外です。

なので、 m.group(1) で目的の文字列が取り出せます。

それと、Pyrtnonのドキュメント「6.2. re — 正規表現操作」によると、
簡単なアプリケーションを除くほとんどで、コンパイルされた形式が用いられるのが普通です。
とのことなので、今回は、以下のようにcompileしてみました。

reg = re.compile(r'(?:File|ファイル):([^\|]+)\|')

■ 実行結果
Royal Coat of Arms of the United Kingdom.svg
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
Elizabeth II greets NASA GSFC employees, May 8, 2007 edit.jpg
Palace of Westminster, London - Feb 2007.jpg
David Cameron and Barack Obama at the G20 Summit in Toronto.jpg
Soldiers Trooping the Colour, 16th June 2007.jpg
Scotland Parliament Holyrood.jpg
London.bankofengland.arp.jpg
City of London skyline from London City Hall - Oct 2008.jpg
Oil platform in the North SeaPros.jpg
Eurostar at St Pancras Jan 2008.jpg
Heathrow T5.jpg
Anglospeak.svg
CHANDOS3.jpg
The Fabs.JPG
PalaceOfWestminsterAtNight.jpg
Westminster Abbey - West Door.jpg
Edinburgh Cockburn St dsc06789.jpg
Canterbury Cathedral - Portal Nave Cross-spire.jpeg
Kew Gardens Palm House, London - July 2009.jpg
2005-06-27 - United Kingdom - England - London - Greenwich.jpg
Stonehenge2007 07 30.jpg
Yard2.jpg
Durham Kathedrale Nahaufnahme.jpg
Roman Baths in Bath Spa, England - July 2006.jpg
Fountains Abbey view02 2005-08-27.jpg
Blenheim Palace IMG 3673.JPG
Liverpool Pier Head by night.jpg
Hadrian's Wall view near Greenhead.jpg
London Tower (1).JPG
Wembley Stadium, illuminated.jpg