我有一个正则表达式来检查与传递(供应)问题有关的消息。
我使用的正则表达式是\b(problem(s|)|issue(s|)) (([^\n \.]*? ){1,3}?)(suppl(y|ies)|parcel|deliver(y|))\b
,其中(([^\n \.]*? ){0,3}?)
的作用就像一个1到3个单词的窗口
这与以下文本匹配:
从来没有有供应交付或服务的问题
从未遇到过交付方面的问题
获取我的用品的问题太多
问题在于前2个文本中有一个我要处理的never
前面。
我尝试使用负前瞻,并对正则表达式\b(?!never)((?:[^\n \.]+? ){2,2}?)(problem(s|)|issue(s|)) (([^\n \.]*? ){1,3}?)(suppl(y|ies)|parcel|deliver(y|))\b
使用了以下更改,该更改与第一文本不匹配,但与第二和第三文本匹配
正则表达式\b(?!never)((?:[^\n \.]+? ){3,3}?)(problem(s|)|issue(s|)) (([^\n \.]*? ){1,3}?)(suppl(y|ies)|parcel|deliver(y|))\b
与第一和第三匹配,与第二文本不匹配。
将这两个正则表达式\b(?!never)((?:[^\n \.]+? ){2,3}?)(problem(s|)|issue(s|)) (([^\n \.]*? ){1,3}?)(suppl(y|ies)|parcel|deliver(y|))\b
组合在一起后,所有3个文本都将匹配。
因此,基本上,当never
是原始匹配项之前的第二个单词时,正则表达式采用3个单词并匹配的窗口,而当never
是原始匹配项之前的第三个单词时,则正则表达式采用一个2个匹配的窗口。
匹配项如下:
从未遇到过供应交付或服务方面的问题
从不送货有问题
获取我的用品太多问题
就好像正则表达式试图尽可能地始终匹配。 Link to example
这是正则表达式的一般行为吗?
还有,有没有办法解决这个问题?
谢谢。