正则表达式 - 匹配模式中的单词,电子邮件地址除外

alo*_*lon 5 python regex negative-lookbehind negative-lookahead

我希望在字符串中找到与特定模式匹配的单词.问题是,如果单词是电子邮件地址的一部分,则应忽略它们.

简化"正确单词"的模式\w+\.\w+- 一个或多个字符,实际句点和另一系列字符.

例如,导致问题的句子是a.a b.b:c.c d.d@e.e.e.

目标是仅匹配[a.a, b.b, c.c].对于我构建的大多数正则表达式,e.e也会返回(因为我使用了一些单词边界匹配).

例如:

>>> re.findall(r"(?:^|\s|\W)(?<!@)(\w+\.\w+)(?!@)\b", "a.a b.b:c.c d.d@e.e.e") ['a.a', 'b.b', 'c.c', 'e.e']

如何只匹配不包含"@"的单词?

Cor*_*den 2

我肯定会先清理它并简化正则表达式。

首先我们有

words = re.split(r':|\s', "a.a b.b:c.c d.d@e.e.e")
Run Code Online (Sandbox Code Playgroud)

@然后过滤掉其中带有 的单词。

words = [re.search(r'^((?!@).)*$', word) for word in words]
Run Code Online (Sandbox Code Playgroud)