0

我正在努力让一个正则表达式在它与某个模式匹配的地方工作,只要不是另一个人继续。例如,

Accessory for MyProduct01 <<< Should be classified as an accessory
MyProduct01 with accessory << Should be classified as a product

所以我需要在我的“附件”正则表达式中添加一些东西,比如“匹配“附件”,只要前面的单词不是“与”。

我见过一些例子,人们使用否定前瞻来查找单词是否在字符串中的任何位置,但我想更具体地了解要否定的单词的位置。就像是:

(?!with\s)accessory
4

2 回答 2

2

只需在您的正则表达式中使用负面的后视:

(?<!with\s)accessory
于 2013-03-18T13:11:10.993 回答
0

由于 Python 不支持无限制的后视,我认为您将不得不使用类似于您当前使用的前瞻,但稍微更改原始模式。

^(?!\bwith\b.*\baccessory\b)(?=.*\b(accessory)\b)

在这里,否定前瞻用于确保“附件”不会出现在“与”一词之后。然后,正向前瞻用于确保单词“accessory”出现在字符串中,如果出于某种原因需要捕获它,则使用组捕获。

根据我上面写的方式,你想使用search方法而不是match方法。为了使用match,它要求整个搜索字符串与模式匹配,您需要在模式中添加更多内容:

^(?!\bwith\b.*\baccessory\b)(?=.*\b(accessory)\b).*$
于 2013-03-18T13:00:26.743 回答