python - 正则表达式匹配失败
问题描述
我有以下正则表达式,它应该只匹配 line2,我只想匹配行,Revert
为什么正则表达式也匹配 line 1?如何修复它,使其只匹配 line2 而不匹配 line1?
revert_change = False
line1 = '<change://problem/16539021> Align RNG buffers to 14 bytes to make sure it is aligned'
line2 = 'Revert <change://problem/16539021> Align RNG buffers to 14 bytes to make sure it is aligned'
if re.findall("(?!.*(Revert|revert))[\S]*(?:change:\/\/problem\/)(\d{8,8})", line1):
match = re.findall("(?!.*(Revert|revert))[\S]*(?:rdar:\/\/problem\/)(\d{8,8})", line1)
print "Revert change detected...%s"%match
revert_change = True
print revert_change
输出:-
True
预期输出:-
FALSE
解决方案
你犯了一个错误的逻辑。
(?!.*(Revert|revert))
^
这与 , 相结合re.match
,断言字符串中没有 Revert
or revert
。
要否定断言,请更改(?!
为(?=
(?=.*(Revert|revert))......
^
请注意,(?=
并且(?!
是前瞻,它们确保正则表达式匹配即将到来的部分,而不是实际匹配它。如果要匹配Revert
,只需使用常规组:
.*?(?:Revert|revert)\s*\S*(?:change:\/\/problem\/)(\d{8})
^^^^^^ ^^^^^^
推荐阅读
- database - 如何将一个主键字段关联到多个表?
- python - 如何填充熊猫中的重复值?
- elasticsearch - 弹性搜索 - 更新特定的嵌套对象
- python - 如何生成给定起点的组合?
- azure - 长时间运行的 Azure 索引器引发“操作已取消”异常
- python - 在 Python 函数中,参数中的独立 * 是什么意思
- google-cloud-platform - 无法从 GCP Marketplace 部署 - 缺少有效的默认服务帐号
- c# - datagridview中的两个日期数据差异
- gitahead - 如何在 GitAhead 中暂存单行
- python - 卡在使用 keras.models 的 load_models 加载 facenet-keras 模型