Skip to main content
 首页 » 编程设计

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

2025年05月04日25thcjp

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

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']",) 

匹配 所有 的字符串,而我只期望匹配字符串 [1:6]。我的预期输出是:

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

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

请您参考如下方法:

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

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

eval.in