今度こそ正規表現
猫に反応するにはこうやってみましょう。
@bot.event
async def on_message(message: nextcord.Message):
if re.search(r"[ねネネ][こココ]|猫", message.content):
await message.reply("にゃーん")
はて...となったと思います。
分解して考えます。
[ねネネ]
この[]
(かくかっこ)の説明です。
かくかっこは、中の文字どれかと判定します。
re.search(r"[ねネネ]", "ね") # 〇
re.search(r"[ねネネ]", "ネ") # 〇
re.search(r"[ねネネ]", "ネ") # 〇
re.search(r"[ねネネ]", "な") # ×
[ねネネ][こココ]
分かりやすく考えるためには[ねネネ]
と[こココ]
をそれぞれ一文字だと思ってください。
たとえば、それぞれA
とB
とおきましょう。
re.search(r"AB", "AB") # 〇
re.search(r"AB", "A") # ×
re.search(r"AB", "B") # ×
re.search(r"AB", "BA") # ×
すると、普通の文字のように、ちゃんと文字並びじゃないと判定があっていないことになります。
あたりまえですよね。
これの、A
とB
を、[ねネネ]
と[こココ]
にして置き換えます。
re.search(r"[ねネネ][こココ]", "ねこ") # 〇
re.search(r"[ねネネ][こココ]", "ネコ") # 〇
re.search(r"[ねネネ][こココ]", "ネこ") # 〇
re.search(r"[ねネネ][こココ]", "こね") # ×
よって、1文字目が、「ね」か「ネ」か「ネ」に当てはまり、2文字目が「こ」か「コ」か「コ」に当てはまる文字列が[ねネネ][こココ]
となります。
分かりやすく言えば「シュレディンガーの猫」です!
「ね」と「ネ」と「ネ」の状態が同時に存在している文字列です。(ナニソレ)
猫
re.search(r"猫", "猫") # 〇
re.search(r"猫", "犬") # ×
[ねネネ][こココ]|猫
最後です。
この縦棒|
についてです。
JavaScriptをやってるような人なら分かる人もいるかもしれませんが、または
です。
A|B
だったら、「AまたはB」です。
AかBだったら判定に合っていることになります。
re.search(r"猫|犬", "猫") # 〇
re.search(r"猫|犬", "犬") # 〇
re.search(r"猫|犬", "鳥") # ×
おっしゃ完璧や!
正規表現の詳しい書き方については、優しい方がまとめていただいてる記事を載せさせていただきます。
というわけで、先ほどのコードを実行してみましょう。
というわけで、猫に反応するBOTが出来上がりました。
これで相手方にも喜ばれますね。
次回予告
次回は、ギコギコはせずスーっと切れるスライサーとかについて紹介したいと思います。
というわけで、今日の記事はここまでです。 もしよろしければ記事へのいいねをして、次回記事をお楽しみに!