【发布时间】:2017-02-23 06:20:31
【问题描述】:
我想使用以下正则表达式从 svn 日志中获取修改后的文件,它可以作为单行正常工作,但由于它很复杂,我想使用 re.VERBOSE 以便我可以对其添加注释,然后它就停止了在职的。我在这里想念什么?谢谢!
revision='''r123456 | user | 2013-12-22 11:21:41 -0700 (Thu, 22 Dec 2013) | 1 line
Changed paths:
A /trunk/abc/python/test/module
A /trunk/abc/python/test/module/__init__.py
A /trunk/abc/python/test/module/usage.py
A /trunk/abc/python/test/module/logger.py
copied from test
'''
import re
# doesn't work
print re.search('''
(?<=Changed\spaths:\n)
((\s{3}[A|M|D]\s.*\n)*)
[(?=\n)|]
''', revision, re.VERBOSE).groups()
# works
print re.search('(?<=Changed\spaths:\n)((\s{3}[A|M|D]\s.*\n)*)[(?=\n)|]', revision).groups()[0]
我要提取的字符串是:
A /trunk/abc/python/test/module
A /trunk/abc/python/test/module/__init__.py
A /trunk/abc/python/test/module/usage.py
A /trunk/abc/python/test/module/logger.py
【问题讨论】:
-
您认为
\n受到了怎样的对待?这是您应该对正则表达式使用原始字符串的原因之一。 -
见ideone.com/xlYIMF。主要问题是您必须将其作为原始字符串文字传递。请注意,您通过用
[...]括起来破坏了前瞻(它变成了字符类的一部分)。