使用Python解析git-log文件

3
所以我需要解析像这样的东西:
commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <email@email.com>
Date:   Sat Jul 9 21:29:10 2011 +0400

    commit message

 1 files changed, 21 insertions(+), 11 deletions(-)

并获取作者姓名以及插入和删除的次数。

对于姓名,我有这个:

re.findall(r"Author: (.+) <",gitLog)

对于这些数字,我有以下内容:

re.findall(r" (\d+) insertions\S+, (\d+) deletions",gitLog)

但我想用一个正则表达式获取名称、插入和删除的元组列表。

我尝试过像这样的操作:

re.findall(r"Author: (.+) <.+ (\d+) insertions\S+, (\d+) deletions",gitLog,re.DOTALL)

但是它没有返回任何东西...

那么我的错误在哪里?正则表达式应该是什么样子的?

更新: wRAR是正确的,但不知怎么地,当我读取文件并尝试解析它时,我会得到整个文件作为名称,然后是最后一次插入和删除,因此它匹配整个文件而不是单个提交... [.+]获取整个文件而不是提交的一部分...

4个回答

4
如果您可以访问代码库而不是一些git log的文本转储,请避免解析麻烦并生成不同的日志输出:
git log --pretty="%an" --numstat

将会产生以下输出结果:

作者名字

插入的行数 删除的行数 修改后的文件

你甚至不需要正则表达式。如果你想继续使用正则表达式,你需要匹配插入后的(+),否则它将无法匹配并捕获数字。


那么您每次需要获取不同类型的信息时,都必须运行日志命令。 - Nasif Imtiaz Ohi

3
你应该使用(直接或借用代码)现有的包,例如GitPython,但是关于你的正则表达式问题,提供的文本的正则表达式返回[('Name', '21', '11')] ,所以我认为它是正确的。

1

0

所以我的问题的答案是:

re.findall(r"Author: (\S+) <.+\n.+\n\n.+\n\n.+ (\d+) insertions\S+, (\d+) deletions",gitLog)

不过无论如何,感谢你的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接