尝试创建一个正则表达式,该正则表达式忽略属于组的字符以及跟随一组字符的单词



我是正则表达式的新手,正在尝试在不和谐中创建一个"爸爸机器人",它使用正则表达式以"嗨,____我是爸爸"来响应 #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")

以下是给定接受消息的预期结果:

  1. 大家好。我的名字是布拉德,我是一个很酷的人。

  2. 嗨,"一个很酷的家伙"。我是爸爸!

/(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

这样做的唯一问题是它只捕获单词循环的最后一次迭代。 所以我必须修复捕获组或用于打印捕获组的算法。

最新更新