与re.findall有问题

时间:2014-03-11 15:07:22

标签: python python-2.7

获得以下代码

title = re.findall('<title>(.*?)</title>',content)

按预期工作,但在面对以下结构时不会返回任何内容:

<title>


xxxxxxx


</title>

即。当<title>.

之间有一些空闲空间时

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您需要设置re.S(全部点)标记以使.匹配换行符:

>>> import re
>>> content = """
... <title>
...
...
... xxxxxxx
...
...
... </title>
... """
>>> title = re.findall('<title>(.*?)</title>', content, re.S)
>>> title
['\n\n\nxxxxxxx\n\n\n']
>>> title[0].strip()
'xxxxxxx'
>>>

注意:设置dot-all标志的另一种方法是将(?s)放在Regex模式的开头:

title = re.findall('(?s)<title>(.*?)</title>', content)

答案 1 :(得分:1)

你能试试这个re.S

吗?
re.findall('<title>(.*?)</title>', content, re.S)

答案 2 :(得分:1)

类似的东西:

<title>\n*(.*)\n*</title>

将匹配:

xxxxxxx

See it in action