任意の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) # ['はトカゲを飼って', 'はトカゲを飼って', 'はネズミを飼って']
コメント