我想要实现的是搜索以下模式XXXxXXX
,
但我不希望匹配XXXXxXXX
或XXXxXXXX
之类的内容。
当我尝试以下操作时,它无法给我输出
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)
知道我在这里做错了吗?
答案 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>