任意の1文字にマッチする正規表現
. は 任意の1文字 にマッチするメタ文字です。たとえば は.を飼って という正規表現は、
・次郎君 は犬を飼って いる。
・小春ちゃん は猫を飼って います。
・私 は鼠を飼って いません。
などの文字列にマッチしますが、
・次郎君はイヌを飼っています。
・私はサルを飼ってみたい。
のような文字列とはマッチしません。
# PYTHON_REGEX_ANY_WORD
# In[1]
import re
# 正規表現オブジェクトを作成
regex = re.compile(r'は.を飼って')
# 検索対象となる文字列を作成
sentence_1 = "ええ、そうなんです。\n\
私は犬を飼っていますが、最近太り気味で心配なんです。\n\
それで、一昨日、動物病院に連れて行ったんですよ。\n\
そしたらまあ、案の定というか、先生から「エサの与え過ぎです」と注意されました。"
sentence_2 = "小春はネコを飼ってるよ~。\n\
名前は「うななん子たん」て言うんだ~。\n\
なに~? 変な名前だと~?\n\
そんなことないもん。かわいい名前だもん。"
# sentence_1を検索
f1 = regex.search(sentence_1)
# sentence_2を検索
f2 = regex.search(sentence_2)
print(f1)
print(f2)
# <_sre.SRE_Match object; span=(13, 19), match='は犬を飼って'>
# None
sentence_1 からは は犬を飼って という文字列が検索にかかりました。sentence_2 にはパターンにマッチする文字列はないので、None が返されます。
... とすれば3文字を表します。
たとえば は...を飼って というパターンは
・あの人 はネズミを飼って いる。
・香織ちゃん はトカゲを飼って いるらしい。
という文字列にマッチします。
# In[2]
# 正規表現オブジェクトを作成
regex = re.compile(r'は...を飼って')
# 検索対象となる文字列を作成
sentence = "「ねえねえ、瞳ちゃん、知ってる? 香織ちゃんはトカゲを飼ってるって噂だよ」\n\
「それはあくまで噂でしょう?」\n\
「噂かもしれないけど、きっと本当だよ」\n\
「噂であることを認めながら、本当だと断言するのは矛盾しているわ」\n\
「・・・・・・」\n\
「彼女はトカゲを飼っているかもしれないし、飼っていないかもしれない。\n\
あるいはネズミを飼っているかもしれないし、何も飼っていないかもしれない。\n\
本人に直接訊いて事実を確認しない限り、何も確かなことは言えないわ」\n\
「・・・・・・ひとつだけ確かなことは、瞳ちゃんとは噂話をしないほうがいいってことだよ」"
# sentenceを検索してパターンに適合した文字列を取得
f = regex.findall(sentence)
print(f)
# ['はトカゲを飼って', 'はトカゲを飼って', 'はネズミを飼って']
【GTT-3.5解説】「任意の一文字」を表す正規表現
「任意の一文字」を表す正規表現は、ドット(.)です。ドットは、任意の一文字にマッチするメタ文字として使用されます。例えば、正規表現 a.b は、「a」の後に任意の1文字が続き、「b」で終わる文字列にマッチします。例えば、「aab」や「acb」にマッチしますが、「ab」や「aabb」にはマッチしません。