2

我想要实现的是搜索以下模式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)

知道我在这里做错了什么吗?

4

1 回答 1

4

您需要使用后向断言,而不是前瞻断言:

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>
于 2013-01-18T09:19:21.150 回答