MENU

「Webアプリ開発への道」003 ~Python:正規表現3 バックスラッシュや|~

バックスラッシュを使ってエスケープする

正規表現は丸かっこ()でグループを作るので、(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) は一致した文字列全体を取得する。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

FIREを目指しながら、投資・プログラミング・家庭菜園・資格勉強に取り組んでいます。試行錯誤しながら積み上げる日々を記録するブログです。

コメント

コメントする

目次