我正在尝试使用以下正则表达式进行关键字匹配
you.{0,50}(?<!not)\s?special
在以下字符串列表中
to include:
youaresospecial
you are so special
you are pretty special
you are special
youarespecial
you are sospecial
you are very special
you are super special
you are special
you special
you aresospecial
to exclude:
youarenotspecial
you are not special
youarenotspecial
它与我需要包含的所有字符串匹配,但是它也突出显示了我要排除的字符串之一(“您并不特殊”)
已在https://regex101.com/r/KTsjn8/1
上对此进行了测试有人可以指出原因吗?
答案 0 :(得分:0)
您的正则表达式不起作用,因为\s?
允许模式匹配special
后面的零宽度位置,然后成功断言该位置后面没有not
并带有{ {1}}。
您将不得不在断言后面进行两个否定的回溯声明,一个带有空格,另一个不带空格:
(?<!not)
答案 1 :(得分:0)
解释正则表达式失败的原因:
以you are not special
。
you.{0,50}
与you are not
匹配(请注意空格)(?<!not)
之所以匹配,是因为not
不是not
\s?
之所以匹配,是因为它是可选的special
匹配。要解决此问题,您可以改用否定的前瞻:
you(?!.*not\s?special).{0,50}special