gpt4 book ai didi

python - 为什么 re.VERBOSE 会阻止我的正则表达式模式工作?

转载 作者:太空宇宙 更新时间:2023-11-03 10:56:33 24 4
gpt4 key购买 nike

我想使用以下正则表达式从 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

最佳答案

使用原始字符串文字:

re.search(r'''
(?<=Changed\spaths:\n)
(?:\s{3}[AMD]\s.*\n)*
(?=\n)
''', revision, re.VERBOSE)

查看此修复 Python demo .

主要问题是您必须将其作为原始字符串文字传递,或者使用 \\n 而不是 \n。否则,\n(作为文字换行符)在正则表达式模式中被忽略,被视为格式化空格(在 Python re docs 中阅读更多相关信息)。

此外,请注意,您通过用 [...] 将它括起来(它变成了字符类部分)破坏了前瞻,并且字符类中的 | 被视为文字管道(因此,在这里,它们应该被删除)。

关于python - 为什么 re.VERBOSE 会阻止我的正则表达式模式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com