python 正则表达式中的负前瞻问题

issue with negative lookahead in python regexp

我的正则表达式中的负前瞻被忽略了。我的语法不正确吗?

number_with_no_trailing_tag = re.compile(r"(\[number\sraw\='.+?'\])(?!\s\[)")

strings = [
    "[oper raw='+'] [number raw='9.8'] [units raw='m']",
    "foo [number raw='9.8'] bar",
    "[number raw='9.8'] bar",
    "foo [number raw='9.8']",
    "[number raw='9.8']",
    "[oper raw='+'] [number raw='9.8']",
    "[number raw='9.8'] [units raw='m']"]

matches = [number_with_no_trailing_tag.search(st) for st in strings]

for match in matches:
    if match is not None:
        print match.groups()

我的输出是:

("[number raw='9.8'] [units raw='m']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8'] [units raw='m']",)

匹配 all 个字符串,而我只希望匹配字符串 [1:6]。我的 预期 输出将是:

("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)
("[number raw='9.8']",)

什么给了?任何帮助将不胜感激。

您需要将 .+? 部分更改为否定字符 class ...

re.compile(r"(\[number\sraw='[^']+'])(?!\s\[)")

eval.in