我想要实现的是搜索以下模式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)
知道我在这里做错了什么吗?
最佳答案
您需要使用后视断言,而不是前视断言:
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>
关于Python - 在 re.compile 开头使用 (?!...) 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14395687/