如果一个字符串正好在另一个字符串之前,则取反匹配

2024-09-28 12:14:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

所以我需要在我的'accessory'正则表达式中添加一些东西,比如'match'accessory',只要前面的单词不是“with”。你知道吗

我见过一些例子,人们用否定的lookaheads来判断一个词是否在字符串中的任何地方,但我想更具体地说明要否定的词的位置。比如:

(?!with\s)accessory

Tags: anforasmatch地方with模式be
2条回答

由于Python不支持无界lookbehinds,因此我认为您必须使用与当前使用的类似的lookahead,但要稍微更改原始模式。你知道吗

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

在这里,否定的向前看是用来确保“附件”不在单词“with”之后。然后,使用正向前瞻来确保单词“附件”出现在字符串中,如果出于某种原因需要捕获它,则使用组捕获。你知道吗

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

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

只需在正则表达式中使用否定的外观:

(?<!with\s)accessory

相关问题 更多 >

    热门问题