バックスラッシュを使ってエスケープする
正規表現は丸かっこ()でグループを作るので、(090)9999-8888のような場合はどう表現するのかということを学習します。
グループ分けのための()のなかにパターンとして指定したい()がある場合はバックスラッシュでエスケープします。
import re
pattern=re.compile(r'(\(\d\d\d\))(\d\d\d\d-\d\d\d\d)')
#\(と\)のようにエスケープされた()はパターンにマッチする一部として解釈される
mo=pattern.search('私の携帯電話番号は(090)9999-8888')
print(mo.group(1))
#出力結果は
(090)
丸かっこ()もちゃんとパターンにマッチする一部として認識されてますね。
|(縦線)を使って複数のパターンにマッチ
電話番号の形式も複数ありますよね。
例えば090-9999-7777や(090)9999-8888などなど…
同時に複数のパターンを指定したい場合は|(縦線)で区切ってあげます。
import re
pattern=re.compile(r'(\(\d\d\d\))(\d\d\d\d-\d\d\d\d)|(\d\d\d-\d\d\d\d-\d\d\d\d)')
#2パターンを指定、(090)9999-8888、090-9999-7777どちらかにマッチするように指定
mo1=pattern.search('私の携帯電話番号は(090)9999-8888')
mo2=pattern.search('私の携帯電話番号は090-9999-7777')
print(mo1.group())
print(mo2.group())
#出力結果は
(090)9999-8888
090-9999-7777
しっかり両方とも検索できていますね。
※量指定子を使うとこうなります。
import re
pattern=re.compile(r'(\(\d{3}\))(\d{4}-\d{4})|(\d{3}-\d{4}-\d{4})')
mo1=pattern.search('私の携帯電話番号は(090)9999-8888')
mo2=pattern.search('私の携帯電話番号は090-9999-7777')
print(mo1.group(0))
print(mo2.group(0))
まとめ
()はグループ化のための特別な記号。- 丸かっこそのものを表したいときは
\(、\)とエスケープする。 -
|は「または(OR)」を表し、複数のパターンを指定できる。 -
{3}や{4}の量指定子を使うと、\\d\\d\\dのような繰り返しを簡潔に書ける。 group(0)は一致した文字列全体を取得する。

コメント