我使用python工具检查git日志提交消息,以确定是否引入或恢复给定ID的功能。我无法更改工具的代码。只能提供适当的正则表达式作为输入。输入如下所示:
input_regexes = {
"add_pattern": r".*[s*(IDd{3})s*](.*)"
"revert_pattern": r"[Rr]evert.*[s*(IDd{3})s*](.*)"
}
第一个捕获组用于获取特性ID,第二个捕获组用作特性描述。问题是,当出现带有[Rr]evert
的字符串时,两个模式都匹配。我想实现的是:
revert_pattern
模式只匹配包含括号中ID和[Rr]evert
前面的提交消息add_pattern
模式只匹配包含括号中ID的提交消息,不包含前面的[Rr]evert
在下面的例子中,revert_pattern
应该只匹配revert_feature_message
和add_pattern
应该只匹配add_feature_messages
中的字符串:
revert_feature_message='Revert "[ID123] some cool feature."'
add_feature_messages=[
'[ID123] some cool feature.',
'some prefix [ID123] some cool feature'
]
我试着使用:
(?<!Revert).*?[s*(IDd{3})s*](.*)
作为add_pattern
,但它没有锻炼。你能帮我改一下吗?
恢复模式[Rr]evert.*[s*(IDd{3})s*](.*)
已经只匹配revert_feature_message
如果只匹配add_feature_messages
中的字符串,可以断言该字符串不包含revert或revert。
^(?!.*[Rr]evert).*[s*(IDd{3})s*](.*)
Regex演示
或者更具体一点:
^(?!.*[Rr]evert [^][]*[s*IDd{3}s*]).*[s*(IDd{3})s*](.*)
Regex演示
如果Revert
在字符串的开头,可以省略前面的.*