[英]Python re.split() misbehaving
我正在嘗試解析git log --numstat
生成的git log --numstat
。 格式如下
commit 1234567890123456789012345678901234567890
Author: Joseph Shabadoo
Date: Sun Apr 21 14:34:36 2013 +0300
fix the thing that was broken
4 0 foo.py
13 7 bar.py
commit aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
Author: Donald Dont
Date: Fri Apr 19 21:15:00 2012 +0300
do some stuff
15 6 foo.py
... etc
我將其存儲在文件中,並且我想將其拆分為多個提交,以便於解析。 我正在使用re.split()
,但是似乎找不到合適的正則表達式。 我想用
re.split('.*?\n\n.*?\n\n.*?\n\n', myfile.read())
可以正常工作,但是我將所有第一次提交和第二次提交的前兩行也合並在一起( commit aaaaa...
和Author: ...
)。 這特別令人困惑,因為在Author:
行之后沒有兩個連續的換行符。 哪些正則表達式可以將其拆分?
編輯:顯然.
默認情況下與換行符不匹配。 re需要使用標志re.DOTALL
進行編譯。
只匹配非常一致的第一行怎么樣?
'commit [0-9a-f]{40}'
讓我們對其進行可視化:
您的正則表達式在比賽結束時需要兩行換行,而行后只有一行
4 0 foo.py
您可以遍歷行,使行與commit
匹配。 然后,您可以將當前提交的所有行存儲在數組中。
allCommits = []
currentCommitLines = []
for line in lines:
if re.match(r'^commit [0-9a-f]{40}') and currentCommitLines:
allCommits.append(currentCommitLines)
currentCommitLines = []
currentCommitLines.append(line)
然后,您將把提交存儲在數組中,以后可以解析/處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.