我正在开发一个GitHub挂钩,以便在提交消息匹配某个字符串时移动一些Zenhub问题。我想要实现的是:
Progress #121, #128, #50
我想在这里提取问题编号:121,128,50,该行必须有一个Progress前缀。问题必须用逗号分隔,以#开头,并且可以包含任意数量的前缀空格。
到目前为止我唯一取得的成就是
^(?:Progress)(?:\s*#(\d+),?)+$
这只返回给我最后一个捕获组,这里是50。
我想知道我哪里出错了,以及如何达到理想的结果。谢谢。
编辑:我想使用正则表达式,因为我也想解决这些额外的情况:“进度”可以从字符串的中间开始,或者从任何行开始。如果“进度”从字符串的中间开始,那么我将不得不检查它之后的任何问题编号。所以,如果有任何答案可以在Python(除了正则表达式)之外优雅地解决这个问题,也欢迎。
答案 0 :(得分:3)
您正在使用正则表达式来匹配整个模式,并同时从中提取重复的子模式。我不确定你能同时做到这两件事 - 无论是其中一个。
如果你正在使用Python,我建议你这么做。使用简单的str.startswith
检查,然后使用正则表达式提取问题编号。
if string.startswith('Progress'):
return re.findall('#(\d+)', string)
应返回['121', '128', '50']
。如果您正在使用JavaScript,则可以调整类似的方法。