Python - 在re.compile开头使用(?!...)失败

时间:2013-01-18 09:16:36

标签: python

我想要实现的是搜索以下模式XXXxXXX, 但我不希望匹配XXXXxXXXXXXxXXXX之类的内容。

当我尝试以下操作时,它无法给我输出

test = "DDDfSSSsFFFjKKKk"
p = re.compile('(?![A-Z])[A-Z]{3}([a-z]{1})[A-Z]{3}(?![A-Z])')
x = p.findall(test)

虽然当我把(?![A-Z])的开头拿出来时它工作得很好但它不能完成避免工作XXXXxXXX

test = "DDDfSSSsFFFjKKKk"
p = re.compile('[A-Z]{3}([a-z]{1})[A-Z]{3}(?![A-Z])')
x = p.findall(test)

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:4)

你需要使用一个lookbehind断言,而不是一个先行断言:

p = re.compile('(?<![A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?![A-Z])')

你目前的正则表达式是:

(?![A-Z]) # Make sure that the next character isn't an uppercase ASCII letter 
[A-Z]{3}  # Now match three uppercase ASCII letters (<-- impossible>