正規表現

とりあえず備忘録でpythonでの正規表現でちょっと困ったところのメモ.

まずは、

import re #reモジュールのインポート
regex = re.compile(pattern) #patternは正規表現

を用いると早くなる。
コンパイルせずに使うと重くなるので、癖にした方がいいかな。

正規表現(pattern→regex)にマッチするものを文章(text)から取り出して、使う。

1.regex.match(text)
 :textの'先頭'にpatternにマッチするものがあればそれを返す。
2.regex.search(text) 
 :textの'どこか'にpatternにマッチするものがあればそれを返す。
3.regex.findall(text)
 :textのpatternにマッチする部分を全てリストに入れて返す。
4.regex.finditer(text)
 :text内のpatternにマッチする部分を繰り返しとって返す。

これらを例えば m = (上の1~4のどれか) としておくと、m.group()で取り出せる。
この時、その引数に空 or 0とするとマッチするところを全部まとめて返してくれる。
引数に1以上を入れるとマッチするところを順番に返せる。はず。よくわからんかった。

別解

scanner = regex.scanner(text)
m = scanner.search()
while m:
  print m.group(0)
  m = scanner.search()

とすれば順番に返すことが出来る、みたい。
でもこれは自分でやった範囲では

for m in regex.finditer(text):
  print m.group(0)

と同じだった。