【发布时间】:2018-01-08 12:58:02
【问题描述】:
我正在寻找与特定模式匹配的字符串中的单词。 问题是,如果这些词是电子邮件地址的一部分,它们应该被忽略。
为简化起见,“专有词”\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']
如何只匹配不包含“@”的单词?
【问题讨论】:
-
而不是试图让一个聪明的正则表达式运行,也许先清理字符串?首先剥离 \w+@\w+ 然后处理。我用 python 做了很多 ETL 工作,通常更容易/更快地清理垃圾,然后拆分/处理数据。
标签: python regex negative-lookahead negative-lookbehind