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)

しかし、1つの正規表現で名前、挿入、および削除のタプルのリストを取得したいと思います。

私は次のようなことをしようとしました

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

しかし、それは何も返しません...

それで、私の間違いは何ですか?正規表現はどのように見えるべきですか?

UPADTE:wRARは正しいですが、どういうわけか、iファイルを読み取って解析しようとすると、ファイル全体が名前として取得され、最後に挿入と削除が行われるため、ファイル全体と一致しますが、単一のコミットとは一致しません...[。 +]ファイル全体を取得しますが、コミットの一部は取得しません...

4

4 に答える 4

4

リポジトリへのアクセス権があり、のテキストダンプがない場合はgit log、解析の問題を回避し、別のログ出力を生成します。

git log --pretty="%an" --numstat

次の形式の出力を生成します。

著者名

lines_inserted lines_deletedmodified_file

正規表現も必要ありません。正規表現を維持したい場合は(+)、挿入後を一致させる必要があります。一致しないと、まったく一致せず、数値が取得されません。

于 2011-07-13T17:38:20.853 に答える
3

GitPythonなどの既存のパッケージを(直接またはコードを借用して)使用する必要がありますが、正規表現の質問については、提供されたテキストに対して提供された正規表現が返さ[('Name', '21', '11')]れるので、正しいと思います。

于 2011-07-13T17:38:46.453 に答える
1

PythonでGitログを解析するために使用したモジュールがあります。かなり生きているように見えます:

https://github.com/gaborantal/git-log-parser

于 2020-07-20T15:54:37.517 に答える
0

だから私の質問への答えは:

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

しかし、とにかく答えてくれてありがとう。

于 2011-07-14T08:39:00.853 に答える