试图在正则表达式中找到所有表示“I'm”但不在单词末尾的匹配项

2024-07-04 07:52:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在discord.py中创建了一个类似于“爸爸笑话”的机器人,并使用RegEx查找所有“触发器”来启动爸爸笑话。以下是我目前的代码:

            string = message.content.lower()
            pattern = ' im | i\'m | i am '

            result = re.split(pattern, string, 1)

            if len(result) == 2:
                if "botpuns" in result[1]:
                    await message.channel.send(f"No {message.author.mention}, I'm Botpuns!!")
                else:
                    await message.channel.send(f"Hi {result[1]}, I'm Botpuns!!")

            await bot.process_commands(message)
            return

现在它能工作,但不完全是我想要的。每当有人说“我饿了”这样的话时,它就起作用,但当有人说“他”这样的话时,它也起作用,因为这也符合标准。我不想让它直接检查它背后是否没有任何东西,因为这样在消息的开头就不起作用,但我想知道是否有一种方法可以检查它是否在一个词的结尾。谢谢


Tags: pysendmessagestringifchannel机器人result
1条回答
网友
1楼 · 发布于 2024-07-04 07:52:36

如果我从评论中正确理解,您想要的是:

import re
txt = "Hi i'm dad"

message = re.match(r'^(.*[\s])?(im|i am|i\'m)[\s](.*)$', txt, re.IGNORECASE)
print(message.groups()[-1])
# prints the last group, which is "dad"

^(.*[\s])?(im|i am|i\'m)[\s](.*)$

  • (.*[\s])?-组0(可选):任意数量的字符和单个空格
  • (im|i am|i\'m)[\s]-group1:im、i-am或i-am标记在这里,后跟一个空格
  • (.*)-第2组:任意数量的字符

相关问题 更多 >

    热门问题