如果字符串恰好在另一个字符串之前,则否定匹配

时间:2013-03-18 12:53:32

标签: python regex regex-negation

我正在努力让正则表达式在某个模式匹配的地方工作,只要不是由另一个模式进行。例如,

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

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

我已经看到一些例子,其中人们正在使用否定前瞻来查找字符串中是否有任何单词,但我想更加具体地说明该单词的位置是否定的。类似的东西:

(?!with\s)accessory

2 个答案:

答案 0 :(得分:2)

在你的正则表达式中使用负面的后视:

(?<!with\s)accessory

答案 1 :(得分:0)

由于Python不支持无界的外观,我认为你将不得不使用类似于你当前使用的前瞻,但稍微更改原始模式。

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

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

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

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