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

标签 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)

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

最佳答案

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

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/

相关文章:

python - 如何使数据框中的列唯一?

python - 如何在 ubuntu 中的 localhost 上运行简单的 cgi-bin python 网站

python - 在分配律和交换律下找到等价结果

python - 使用 Gunicorn 时如何记录到文件

python - SSL.SSLError : tlsv1 alert protocol version

python - 加载 word2vec 模块时出现“utf-8”解码错误

python - 刷新后显示相同页面的Http服务器?

javascript - 使用 Bokeh 的交互式 slider

python - 通过 geopandas 连接多个 shapefile

php - Raspberry php不向arduino发送串行数据