我如何确保关于芬德尔()停在正确的地方?

2024-09-26 22:55:31 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码:

a='<title>aaa</title><title>aaa2</title><title>aaa3</title>'
import re
re.findall(r'<(title)>(.*)<(/title)>', a)

结果是:

^{pr2}$

如果我设计了一个爬虫程序来获取网站的标题,我可能会得到这样的结果,而不是网站的标题。在

我的问题是,如何将findall限制为单个<title></title>?在


Tags: 代码import程序re标题title网站爬虫
3条回答

使用非贪婪搜索代替:

r'<(title)>(.*?)<(/title)>'

问号表示要尽可能少地匹配字符。现在findall()将返回所需的每个结果。在

http://docs.python.org/2/howto/regex.html#greedy-versus-non-greedy

re.findall(r'<(title)>(.*?)<(/title)>', a)

*后面添加一个?,这样它将是非贪心的。在

如果只需要一个匹配项,请使用re.search而不是{}:

>>> s = '<title>aaa</title><title>aaa2</title><title>aaa3</title>'
>>> import re
>>> re.search('<title>(.*?)</title>', s).group(1)
'aaa'

如果您想要所有标记,那么您应该考虑将其更改为非贪心的(即-.*?):

^{pr2}$

但要考虑使用beauthoulsoup或lxml或类似的方法来解析HTML。在

相关问题 更多 >

    热门问题