MENU

~Python:正規表現5~(修飾子がマッチする回数)

アプリ開発への道
目次

〜修飾子がマッチする回数〜

マッチする回数を指定

電話番号の正規表現では\dに続く{3}によって、ちょうど3つの\d(数字)とマッチします。

r'\d'は数字1つとマッチするという意味なので、r'\d{1}'でも表せます。

import re
pattern=re.compile(r'\d{3}-\d{4}-\d{4}') #数字3つ-数字4つ-数字4つと合致するパターンを指定
a=pattern.search('私の電話番号は090-0000-0000')
print(a)

#出力結果は
<re.Match object; span=(7, 20), match='090-0000-0000'>

マッチしてもしなくてもいい場合 

疑問符 ? は、直前のパターンが0回または1回出現することを表します。

import re
pattern=re.compile(r'35!?')
a=pattern.findall('私の年齢は35!')
b=pattern.findall('私の年齢は35') #!あるパターンとないパターン両方を指定
print(a)
print(b)

#出力結果は
['35!']
['35'] #!はあってもなくてもマッチしています

複数の文字が任意の場合 ()?

複数の文字が任意の場合は()でグループにしてグループに?をつけます。

例えば電話番号の上3桁の有無にかかわらず、電話番号を検索したい場合は…

import re
pattern=re.compile(r'(\d{3}-)?\d{4}-\d{4}') #(\d{3}-)?で任意のパターンを指定
a=pattern.search('私の電話番号は090-0000-0000')
b=pattern.search('私の電話番号は0000-0000')
print(a)
print(b)

#出力結果は
<re.Match object; span=(7, 20), match='090-0000-0000'>
<re.Match object; span=(7, 16), match='0000-0000'>  #上3桁がある場合もない場合もマッチしました

? は「直前のパターンが0回または1回出現する」ことを表します。

グループ () の後ろに付けた場合は、そのグループ全体が任意になります。

0個以上の修飾子とマッチする *

アスタリスク * は、直前のパターンが0回以上出現することを表します。
つまりアスタリスク直前のパターンが、0回以上出現してもよいことを表します。

import re
pattern=re.compile(r'(\d{3}-)*\d{4}-\d{4}')
a=pattern.search('私の電話番号は090-0000-0000')
b=pattern.search('私の電話番号は090-090-090-090-0000-0000') #090が4回でもマッチします
c=pattern.search('私の電話番号は0000-0000')
print(a)
print(b)
print(c)

#出力結果は
<re.Match object; span=(7, 20), match='090-0000-0000'>
<re.Match object; span=(7, 32), match='090-090-090-090-0000-0000'> 
<re.Match object; span=(7, 16), match='0000-0000'> #しっかりマッチしています

1回以上マッチする  +

アスタリスクが0回以上マッチするのに対し、プラスは一回以上マッチすることを意味します。
プラス+は最低1回は出現する必要があります。

import re
pattern=re.compile(r'(\d{3}-)+\d{4}-\d{4}')
a=pattern.search('私の電話番号は090-0000-0000')
b=pattern.search('私の電話番号は090-090-090-090-0000-0000')
c=pattern.search('私の電話番号は0000-0000')
print(a)
print(b)
print(c)

#出力結果は
<re.Match object; span=(7, 20), match='090-0000-0000'>
<re.Match object; span=(7, 32), match='090-090-090-090-0000-0000'>
None  #cは上3桁の番号がないのでマッチしませんでした。

修飾子まとめ

正規表現では、修飾子を使うことで「何回繰り返すか」を指定できます。

修飾子意味
{3}ちょうど3回\d{3} → 数字3桁
?0回または1回35!? → 35 または 35!
*0回以上(abc)* 
→ ''abcabcabc
+1回以上(abc)+ → abcabcabc
  • {3} は指定した回数だけ繰り返します。
  • ? は「ある場合もない場合も許可する」ときに使います。
  • * は0回以上なので、まったくなくてもマッチします。
  • + は1回以上なので、最低1回は出現する必要があります。

修飾子は、直前の文字やグループ () に対して適用されます。
複数の文字をまとめて修飾したい場合は、() でグループ化してから修飾子を付けます。

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

この記事を書いた人

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

コメント

コメントする

目次