使用正则表达式解析多行输出

时间:2017-10-10 22:17:01

标签: python python-2.7

我正在尝试用正则表达式解析多行输出,

>>> 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')]

感谢帮助!

1 个答案:

答案 0 :(得分:2)

问题是贪婪的.*(正则表达式中的所有3个)。 如果您通过附加?(将其更改为.*?)使其全部非贪婪, 您将获得预期的所有结果:

>>> re.findall(r'.*?Feature\s*(\d+).*?Learning\s*:\s*(\w+).*?', a, re.MULTILINE|re.DOTALL)
[('101', 'Yes'), ('102', 'No')]

此外,使用带有r'...'的原始字符串作为正则表达式总是很好。