我正在使用 python 正则表达式引擎并尝试实现类似于字符串 foo,fou,bar,baz 的东西.我想匹配 baz当且仅当 fou不在它之前。我试过负面的看法 (<?!fou)baz但它不起作用,因为它仅适用于立即跟随。
请您参考如下方法:
re模块不支持变长lookbehinds,你需要使用regex模块。
用 re 得到你想要的模块,你可以使用否定前瞻来匹配fou并使用捕获的组来获取 baz :
In [15]: str_ = 'foo,fou,bar,baz'
In [16]: re.search(r'^(?!.*fou.*baz).*(baz)', str_)
In [17]: str_ = 'foo,foz,bar,baz'
In [18]: re.search(r'^(?!.*fou.*baz).*(baz)', str_)
Out[18]: <_sre.SRE_Match object; span=(0, 15), match='foo,foz,bar,baz'>
In [19]: re.search(r'^(?!.*fou.*baz).*(baz)', str_).group(1)
Out[19]: 'baz'
在^(?!.*fou.*baz).*(baz) :
零宽度负先行,
(?!.*fou.*baz), 确保fou不在baz之前在整个输入中.*(baz)放baz在唯一捕获的组中
