使用负面后瞻的多个正则表达式匹配

时间:2016-02-23 14:20:38

标签: python regex

我有这一段:

  

“这是包含主代码的下一段   预算和其他主预算。它也只包含主人   预算条款。但只有这个预算应该匹配。但这个预算   不会匹配“。

在这里,我试图仅匹配“预算”一词的第一个匹配项,如果前面有“master”或“其他master”,则跳过所有预算的出现。我正在使用负面观察,并提出了一段在网站https://regex101.com上工作正常的代码:

p = re.compile(r'((?<!master|master other)\s\bbudget\b)')
test_str = "This is the next paragraph that contains the code for the master budget and the other master budget. Also it contains only the master budget terms. But only this budget should get matched"
re.findall(p, test_str)

但我得到这个错误“后视需要固定宽度模式”。有什么方法吗?

1 个答案:

答案 0 :(得分:2)

您获得的错误是因为Python中的lookbehinds应该是固定长度的,(?<!master|master other)长度不是已修复。

(?<!master|master other)

相当于

(?<!master)(?<!master other)

您可以将正则表达式更改为:

((?<!master)(?<!master other)\s\bbudget\b)