正则表达式与前缀匹配

时间:2017-10-29 07:42:31

标签: python regex

我正在开发一个GitHub挂钩,以便在提交消息匹配某个字符串时移动一些Zenhub问题。我想要实现的是:

Progress #121, #128, #50

我想在这里提取问题编号:121,128,50,该行必须有一个Progress前缀。问题必须用逗号分隔,以#开头,并且可以包含任意数量的前缀空格。

到目前为止我唯一取得的成就是

^(?:Progress)(?:\s*#(\d+),?)+$

这只返回给我最后一个捕获组,这里是50。

我想知道我哪里出错了,以及如何达到理想的结果。谢谢。

编辑:我想使用正则表达式,因为我也想解决这些额外的情况:“进度”可以从字符串的中间开始,或者从任何行开始。如果“进度”从字符串的中间开始,那么我将不得不检查它之后的任何问题编号。

所以,如果有任何答案可以在Python(除了正则表达式)之外优雅地解决这个问题,也欢迎。

1 个答案:

答案 0 :(得分:3)

您正在使用正则表达式来匹配整个模式,并同时从中提取重复的子模式。我不确定你能同时做到这两件事 - 无论是其中一个。

如果你正在使用Python,我建议你这么做。使用简单的str.startswith检查,然后使用正则表达式提取问题编号。

if string.startswith('Progress'):
    return re.findall('#(\d+)', string)

应返回['121', '128', '50']。如果您正在使用JavaScript,则可以调整类似的方法。