メタ文字① 任意の1文字

メタ文字① 任意の1文字

≫ 正規表現の基本については、こちらの記事を参照してください。

任意の1文字にマッチする正規表現

 .任意の1文字にマッチするメタ文字です。
 たとえば は.を飼って という正規表現は、

 ・次郎君 は犬を飼って いる。
 ・小春ちゃん は猫を飼って います。
 ・私 は鼠を飼って いません。

などの文字列にマッチしますが、

 ・次郎君はイヌを飼っています。
 ・私はサルを飼ってみたい。

のような文字列とはマッチしません。

# reモジュールをインポート
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文字を表します。
 たとえば は...を飼って というパターンは

 ・あの人 はネズミを飼って いる。
 ・香織ちゃん はトカゲを飼って いるらしい。

という文字列にマッチします。

# reモジュールをインポート
import re

# 正規表現オブジェクトを作成
regex = re.compile(r'は...を飼って')

# 検索対象となる文字列を作成
sentence = "「ねえねえ、瞳ちゃん、知ってる? 香織ちゃんはトカゲを飼ってるって噂だよ」\n\
「それはあくまで噂でしょう?」\n\
「噂かもしれないけど、きっと本当だよ」\n\
「噂であることを認めながら、本当だと断言するのは矛盾しているわ」\n\
「・・・・・・」\n\
「彼女はトカゲを飼っているかもしれないし、飼っていないかもしれない。\n\
あるいはネズミを飼っているかもしれないし、何も飼っていないかもしれない。\n\
本人に直接訊いて事実を確認しない限り、何も確かなことは言えないわ」\n\
「・・・・・・ひとつだけ確かなことは、瞳ちゃんとは噂話をしないほうがいいってことだよ」"

# sentenceを検索してパターンに適合した文字列を取得
f = regex.findall(sentence)

print(f)
['はトカゲを飼って', 'はトカゲを飼って', 'はネズミを飼って']