我是regex的新手,只是测试它,我的问题是在查看示例后,我的正则表达式几乎匹配整行而不是标记之间。
re.findall(r'<i>(.*)</i>', 'test <i>abc</i> <i>def</i>')
['abc</i> <i>def']
为什么在给我abc
def
答案 0 :(得分:3)
您正在使用贪婪的.*
。您希望将?
添加到其末尾,使其不贪婪。
>>> re.findall(r'<i>(.*?)</i>', 'test <i>abc</i> <i>def</i>')
['abc', 'def']
来自re
文档:
*
,+
和?
限定符都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不可取的;如果RE<.>
与'<H1>title</H1>'
匹配,则它将匹配整个字符串,而不仅仅是''。在限定符之后添加?
使其以非贪婪或最小的方式执行匹配;尽可能少的字符将匹配。在前一个表达式中使用.?
将仅匹配''。