为具有多个\ n的文本写正则表达式

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

标签: python regex regex-negation regex-greedy

此正则表达式<li>.*end不适用于以下文字,我做错了什么?

文本

    <li>asdsadasd
adssadasdasdasdas
asdasdasdasdasdad
adsasdasdasdasd
dasdadadsadadasdasdasdasda
end

有人可以帮我写一个正则表达式来获取所有文本吗?

2 个答案:

答案 0 :(得分:4)

默认情况下,.与换行符不匹配。您必须传递DOTALL标志...

regex = re.compile('<li>.*end', re.DOTALL)

或等效地,

regex = re.compile('<li>.*end(?S)')

修改:不是re.MULTILINE标记 - 它会改变$^的行为。

答案 1 :(得分:2)

您必须从re选择多行选项:

import re
expr = re.comile("<li>.*end", re.M)

考虑到评论和Dietrich的回答,如果您需要$^的行为相同,请使用re.DOTALL代替re.M/re.MULTILINE