match ではなくて search を使う時
ここで説明するのは、正規表現を使うとき、いつも match 関数を使うのではなく、 search 関数などと使い分けないといけない場合があるので気をつけましょう、というお話です。
簡単なことですが、知らないとポカをしてしまうことがあるかもしれないので、動作確認かねて紹介しておきます。
基本的に、match関数は文字の先頭からマッチするかどうか試みます。オプションでマッチさせる開始場所を指定できますが、そうしたパラメータを渡さない限り先頭からマッチを試みます。
したがって、「Python での正規表現の基本的な書き方」で使ったコードで、 例えば "Hello world!" の前に何か文字があるような場合、、、
import re
match = re.match(r'Hello (.*)', 'Spam... Hello world!')
if match is None:
print 'Not match'
else:
print match.group(1)
こうした場合は、マッチしないことになります。 結果は次の通りです。
Not match
渡した文字列の中からマッチする部分を探して、そのマッチ部分に対して処理を行うのは、search関数です。
search 関数を使うと次のようになります。
import re
match = re.search(r'Hello (.*)', 'Spam... Hello world!')
if match is None:
print 'Not match'
else:
print match.group(1)
この実行結果は次の通りです。
world!