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\[)")
我的正则表达式中的负前瞻被忽略了。我的语法不正确吗?
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\[)")