我正在尝试用正则表达式解析多行输出,
>>> a = """
... Feature 101
... Learning: Yes
... --------------
... Feature 102
... Learning: No
... """
我得到的只是一个值,不应该像我使用re.MULTILINE|re.DOTALL
一样返回两个值吗?
>>> import re
>>> re.findall('.*Feature\s*(\d+).*Learning\s*:\s*(\w+).*', a, re.MULTILINE|re.DOTALL)
[('102', 'No')]
感谢帮助!
答案 0 :(得分:2)
问题是贪婪的.*
(正则表达式中的所有3个)。
如果您通过附加?
(将其更改为.*?
)使其全部非贪婪,
您将获得预期的所有结果:
>>> re.findall(r'.*?Feature\s*(\d+).*?Learning\s*:\s*(\w+).*?', a, re.MULTILINE|re.DOTALL)
[('101', 'Yes'), ('102', 'No')]
此外,使用带有r'...'
的原始字符串作为正则表达式总是很好。