我有以下仅与第2行匹配的正则表达式,我只想与Revert
匹配行,为什么正则表达式也与第1行匹配?如何修复它,使其仅匹配第2行而不匹配第1行?
revert_change = False
line1 = '<change://problem/16539021> Align RNG buffers to 14 bytes to make sure it is aligned'
line2 = 'Revert <change://problem/16539021> Align RNG buffers to 14 bytes to make sure it is aligned'
if re.findall("(?!.*(Revert|revert))[\S]*(?:change:\/\/problem\/)(\d{8,8})", line1):
match = re.findall("(?!.*(Revert|revert))[\S]*(?:rdar:\/\/problem\/)(\d{8,8})", line1)
print "Revert change detected...%s"%match
revert_change = True
print revert_change
输出:-
True
预期的输出:-
FALSE
答案 0 :(得分:4)
您的逻辑有误。
::before
与(?!.*(Revert|revert))
^
结合使用,断言字符串中没有否 re.match
或Revert
。
要否定断言,请将revert
更改为(?!
(?=
请注意,(?=.*(Revert|revert))......
^
和(?=
是超前的,它们确保正则表达式与即将出现的部分匹配,而没有实际匹配。如果您想匹配(?!
,只需使用常规组即可:
Revert