1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クリスマスまでにPythonを使ってDiscordのBOTを作るAdvent Calendar 2022

Day 14

【14日目】正規表現と最近できた落とし穴②【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-13

今度こそ正規表現

猫に反応するにはこうやってみましょう。

main.py - async def on_message
@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"[ねネネ]", "")  # ×

[ねネネ][こココ]

分かりやすく考えるためには[ねネネ][こココ]をそれぞれ一文字だと思ってください。
たとえば、それぞれABとおきましょう。

re.search(r"AB", "AB") # 〇
re.search(r"AB", "A") # ×
re.search(r"AB", "B")  # ×
re.search(r"AB", "BA")  # ×

すると、普通の文字のように、ちゃんと文字並びじゃないと判定があっていないことになります。
あたりまえですよね。

これの、ABを、[ねネネ][こココ]にして置き換えます。

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"猫|犬", "") # ×

おっしゃ完璧や!

正規表現の詳しい書き方については、優しい方がまとめていただいてる記事を載せさせていただきます。

というわけで、先ほどのコードを実行してみましょう。

image.png

というわけで、猫に反応するBOTが出来上がりました。

これで相手方にも喜ばれますね。

次回予告

次回は、ギコギコはせずスーっと切れるスライサーとかについて紹介したいと思います。

というわけで、今日の記事はここまでです。
もしよろしければ記事へのいいねをして、次回記事をお楽しみに!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?