Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带前缀的正则表达式行匹配_Python_Regex - Fatal编程技术网

Python 带前缀的正则表达式行匹配

Python 带前缀的正则表达式行匹配,python,regex,Python,Regex,我目前正在开发一个GitHub钩子,以便在提交消息与特定字符串匹配时移动一些Zenhub问题的位置。我想要实现的是: Progress #121, #128, #50 我想在这里提取发行号:121、128、50,并且该行必须有一个进度前缀。问题必须以逗号分隔,以#开头,并且可以有任意数量的前缀空格 到目前为止,我所取得的成就是 ^(?:Progress)(?:\s*#(\d+),?)+$ 这只返回给我最后一个捕获组,这里是50 我想知道我哪里出了问题,以及如何达到预期的结果。多谢各位 编辑:

我目前正在开发一个GitHub钩子,以便在提交消息与特定字符串匹配时移动一些Zenhub问题的位置。我想要实现的是:

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

到目前为止,我所取得的成就是

^(?:Progress)(?:\s*#(\d+),?)+$
这只返回给我最后一个捕获组,这里是50

我想知道我哪里出了问题,以及如何达到预期的结果。多谢各位

编辑:我想使用正则表达式,因为我还想解决这些额外的情况:“Progress”可以从字符串的中间开始,也可以从任何一行开始。如果“Progress”开始于字符串的中间,那么我必须检查它后面的任何问题编号


因此,如果有任何答案可以用Python(而不是regex)优雅地解决这个问题,我们也欢迎

使用正则表达式匹配整个模式,同时从中提取重复的子模式。我不确定你能否同时做到这两件事——要么是一件,要么是另一件

如果您使用的是Python,我建议您简化此操作。使用简单的
str.startswith
检查,然后使用正则表达式提取问题编号

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

它应该返回
['121',128',50']
。如果使用JavaScript,可以采用类似的方法。

使用正则表达式匹配整个模式,同时从中提取重复的子模式。我不确定你能否同时做到这两件事——要么是一件,要么是另一件

如果您使用的是Python,我建议您简化此操作。使用简单的
str.startswith
检查,然后使用正则表达式提取问题编号

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

它应该返回
['121',128',50']
。如果你在使用JavaScript,你可以采用类似的方法。

你也需要50吗?你想用JS还是python?不幸的是,JavaScript和python都不支持匹配继续锚
\G
,这会使这变得很容易:
(?:^Progress\s+| | | G#)(\d+(:,\s+|$)
,TimPietzcker这就是它的名字吗?谢谢@Cᴏʟᴅsᴘᴇᴇᴅ: 我不确定这是否是“官方”名称。你也需要50吗?你想要JS或python格式的吗?不幸的是,JavaScript和python都不支持匹配延续锚点
\G
,这将使这变得很容易:
(?:^Progress\s+\G})(\d+,\s+$)
,TimPietzcker是这样称呼的吗?谢谢@Cᴏʟᴅsᴘᴇᴇᴅ: 我不确定这是否是“官方”名称。谢谢,我已经想到了这个解决方案,但我想使用regex。我认为最好解决多个其他情况,例如:“Progress”可以从字符串的中间或任何行的开头开始。如果“Progress”从字符串的中间开始,那么我必须检查它后面是否有发行号。@SơnĐỗ你可以做:如果字符串中的“Progress”。。。。重复同样的事情。为什么不呢?@SơnĐỗ如果你的问题得到了回答,请回答。谢谢。谢谢,我已经想到了这个解决方案,但我想使用regex。我认为最好解决多个其他情况,比如:“Progress”可以从字符串的中间开始,或者从任何一行开始。如果“Progress”从字符串的中间开始,那么我必须检查它后面是否有发行号。@SơnĐỗ你可以做:如果字符串中的“Progress”。。。。重复同样的事情。为什么不呢?@SơnĐỗ如果你的问题得到了回答,请回答。谢谢