Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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
diffstat输出的Python正则表达式_Python_Regex - Fatal编程技术网

diffstat输出的Python正则表达式

diffstat输出的Python正则表达式,python,regex,Python,Regex,我想使用python正则表达式匹配以下字符串并提取数字 1 file changed, 1 insertion(+), 1 deletion(-) 2 files changed, 10 insertions(+), 10 deletions(-) 1 file changed, 1 insertion(+) 1 file changed, 2 deletions(-) 所以我想在python正则表达式和前瞻模式中使用命名组。但这并不像预期的那样奏效 #!/usr/bin/python imp

我想使用python正则表达式匹配以下字符串并提取数字

1 file changed, 1 insertion(+), 1 deletion(-)
2 files changed, 10 insertions(+), 10 deletions(-)
1 file changed, 1 insertion(+)
1 file changed, 2 deletions(-)
所以我想在python正则表达式和前瞻模式中使用命名组。但这并不像预期的那样奏效

#!/usr/bin/python
import re
pat='\s*(\d+).*changed,\s+(\d*)(?P<in>=\s+insertion).*(\d+)(?P<del>=\s+deletion.*')
diff_stats = re.compile(pat)
obj = diff_stats.match(line)
#/usr/bin/python
进口稀土
pat='\s*(\d+).*已更改,\s+(\d*)(?P=\s+插入)。*(\d+(?P=\s+删除。*'))
差异统计=重新编译(pat)
obj=差异统计匹配(行)

从命名捕获组中删除
=
。。也。。您的最后一组未关闭

\s*(\d+).*changed,\s+(\d*)(?P<in>\s+insertion).*(\d+)(?P<del>\s+deletion).*
                                 ↑                           ↑          ↑

请参见

您必须添加线端锚点。这样你就可以得到一个完整的匹配。此外,您还需要将某些部件作为可选部件

^\s*(\d+).*\bchanged,\s+(?:(\d*)(?P<in>\s+insertion).*?)?(?:(\d+)(?P<del>\s+deletion.*))?$
^\s*(\d+).*\b已更改,\s+(?:(\d*)(?P\s+插入)。*?)(?:(\d+)(?P\s+删除。*))$

是的,但它只匹配前两行。”“插入”和“删除”或可选。要么一个来,要么两个都来。那么你能给我推荐一下这个款式吗?谢谢。成功了。:)P.S+后面总是插入。and-后面总是跟着删除。所以模式中可能不需要[+-],谢谢。它与所有的线都匹配。但我想知道插入和删除的数量。如果我尝试
obj.group('in')
它不会打印数字,而是打印插入。@Dinesh上面的示例的预期输出是什么?我想提取数字。更改的文件数、插入数和删除数。
^\s*(\d+).*\bchanged,\s+(?:(\d*)(?P<in>\s+insertion).*?)?(?:(\d+)(?P<del>\s+deletion.*))?$