我是正则表达式的新手,正在尝试在不和谐中创建一个"爸爸机器人",它使用正则表达式以"嗨,____我是爸爸"来响应 #text 频道中的消息。我遇到的问题是它包含"im"作为公认的正则表达式。这本身还不错;但是,在使用"他"一词的情况下,IM在他身上被接受。我希望能够修复此正则表达式,以便: - 它读着我是(它是变体( - 包括接下来的 3 个单词,在 I 之后或直到它到达一个句点。
我不确定我写的是否正确。我用 regex101.com 来检查我的正则表达式,我最初的正则表达式就是这个怪物:"(我是|Im|I am|im|i am|i'm(\s+([a-zA-z]+(",我使用组来捕获第二个组。
我尝试过的事情
"(I'm|Im|I am|im|i am|i'm)s+([a-zA-z]+)"
"bi'?ms+(w+)b"
"/bi'?ms+(w+)b/gi"
这是抓取第二组的代码部分
if dadCheck.search(message.content):
match = dadCheck.search(message.content).group(2)
await channel.send("Hi, " + match + ". I'm Dad. ;D")
以下是给定接受消息的预期结果:
大家好。我的名字是布拉德,我是一个很酷的人。
嗨,"一个很酷的家伙"。我是爸爸!
/(im|i am|i'm)s(w*s?){1,3}/i
正则表达式很棒,绝对可以涵盖您的用例。上面的正则表达式查找 I'm 标签,然后抓取捕获组中接下来的 1-3 个单词加上空格供您参考。它使用的字符串
我是个很酷的人。
我是个很酷的人。
我是一个很酷的人。
我是个很酷的人。
我是个很酷的人。
我是一个很酷的人,我喜欢和朋友一起看足球比赛
这是我最终得到的答案。
b(s)?[Ii]((sa)?|'{0,1})[mM]bs+((w*s?)[^.!;:()]w+){1,3}
这将捕获 i'm(im, Im, I'm, i'm,( 的所有变体,并忽略 i' am
这样做的唯一问题是它只捕获单词循环的最后一次迭代。 所以我必须修复捕获组或用于打印捕获组的算法。