正则表达式匹配整行而不是标记之间

时间:2013-12-08 08:18:19

标签: python regex

我是regex的新手,只是测试它,我的问题是在查看示例后,我的正则表达式几乎匹配整行而不是标记之间。

re.findall(r'<i>(.*)</i>', 'test <i>abc</i> <i>def</i>')

['abc</i> <i>def']

为什么在给我abc def

的标签之间不匹配

1 个答案:

答案 0 :(得分:3)

您正在使用贪婪的.*。您希望将?添加到其末尾,使其不贪婪。

>>> re.findall(r'<i>(.*?)</i>', 'test <i>abc</i> <i>def</i>')
['abc', 'def']

来自re文档:

  

*+?限定符都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不可取的;如果RE <.>'<H1>title</H1>'匹配,则它将匹配整个字符串,而不仅仅是''。在限定符之后添加?使其以非贪婪或最小的方式执行匹配;尽可能少的字符将匹配。在前一个表达式中使用.?将仅匹配''。