正则表达式匹配失败

时间:2018-12-19 01:52:28

标签: python

我有以下仅与第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

1 个答案:

答案 0 :(得分:4)

您的逻辑有误。

::before

(?!.*(Revert|revert)) ^ 结合使用,断言字符串中没有 re.matchRevert

要否定断言,请将revert更改为(?!

(?=

请注意,(?=.*(Revert|revert))...... ^ (?=是超前的,它们确保正则表达式与即将出现的部分匹配,而没有实际匹配。如果您想匹配(?!,只需使用常规组即可:

Revert