Skip to main content
 首页 » 编程设计

python之正则表达式:如果单词 B 在 A 之前的某处,如何不匹配单词 A

2024年09月07日37fff_TT

我正在使用 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在唯一捕获的组中