Python正则使用负向回顾排除Revert前缀匹配git提交信息问题
正则规则修改方案
问题根因
- 你之前尝试的
(?<!Revert).*?\[\s*(ID\d{3})\s*\](.*)存在匹配漏洞:负向后顾仅校验当前位置的前缀是否为Revert,但后续的非贪婪匹配.*?可以跳过Revert字符段,从后续位置开始匹配ID规则,导致带Revert的提交依然会命中add_pattern。 - 原有revert_pattern未加行首锚点,可能会匹配到中间带Revert关键词的非回滚提交,不够严谨。
修正后的正则配置
input_regexes = { "add_pattern": r"^(?!.*[Rr]evert).*\[\s*(ID\d{3})\s*\](.*)", "revert_pattern": r"^[Rr]evert.*\[\s*(ID\d{3})\s*\](.*)" }
规则说明
add_pattern开头添加了负向前瞻(?!.*[Rr]evert):会从行首开始校验整个字符串中是否包含Revert或者revert关键词,只要存在就直接匹配失败,完全排除回滚提交命中新增规则的可能。revert_pattern添加了行首锚点^:确保只有Revert/revert出现在提交信息开头的回滚提交才会命中,符合你要求的[Rr]evert前缀规则。
匹配验证
对测试用例的匹配结果完全符合预期:
revert_pattern仅匹配Revert "[ID123] some cool feature.",第一个捕获组提取到ID123,第二个捕获组提取到功能描述add_pattern仅匹配两条新增提交信息,可正常提取ID和功能描述
内容的提问来源于stack exchange,提问作者marek_maras
相关产品推荐
相关产品推荐

