用于多行文本的Python正则表达式匹配

时间:2017-04-20 02:44:45

标签: regex python-2.7

我有一个包含以下内容的日志文件

commit da83ddfdfb36f0c48ab2137efaa8c81a6bb41993
Author: ”abc <abc.def@zyx.com>
Commit: ”abc <abc.def@zyx.com>
..
..

我正在尝试创建正则表达式匹配表达式,如下所示

TEST_COMMIT = 'commit\ (?P<commit>[a-f0-9]+)\n(?P<author>Author.*)\n'
RE_COMMIT = re.compile(TEST_COMMIT, re.MULTILINE | re.VERBOSE)

这在regex101(https://regex101.com/)上匹配正常但在我的代码中不起作用。

我想将提交ID和作者信息作为单独的组表达式获取。 所以

commit group should be : `da83ddfdfb36f0c48ab2137efaa8c81a6bb41993`
author group should be : `Author: ”abc <abc.def@zyx.com>

我的python版本是2.7.12

对我做错了什么评论?

1 个答案:

答案 0 :(得分:1)

最后,我已经能够解决这个问题了。

问题是日志文件新行是回车+新行。 \ r \ n

将Regex更改为包含\ r \ n后,它能够正确获取正则表达式组。这段代码正在运行

TEST_COMMIT = r'''
commit\ (?P<commit>[a-f0-9]+)\r\n
(?P<author>Author.*)\r\n'
(?P<committer>Commit.*)\r\n'
(?<message>.*)\r\n
)
'''
RE_COMMIT = re.compile(TEST_COMMIT, re.MULTILINE | re.VERBOSE)

commits = RE_COMMIT.finditer(data)