我正在努力让正则表达式在某个模式匹配的地方工作,只要不是由另一个模式进行。例如,
Accessory for MyProduct01 <<< Should be classified as an accessory
MyProduct01 with accessory << Should be classified as a product
所以我需要在我的'配件'正则表达式中添加一些东西,比如“匹配”附件“只要前面的单词不是”with“'。
我已经看到一些例子,其中人们正在使用否定前瞻来查找字符串中是否有任何单词,但我想更加具体地说明该单词的位置是否定的。类似的东西:
(?!with\s)accessory
答案 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).*$