2024-09-26 22:55:31 发布
网友
下面是我的代码:
a='<title>aaa</title><title>aaa2</title><title>aaa3</title>' import re re.findall(r'<(title)>(.*)<(/title)>', a)
结果是:
如果我设计了一个爬虫程序来获取网站的标题,我可能会得到这样的结果,而不是网站的标题。在
我的问题是,如何将findall限制为单个<title></title>?在
findall
<title></title>
使用非贪婪搜索代替:
r'<(title)>(.*?)<(/title)>'
问号表示要尽可能少地匹配字符。现在findall()将返回所需的每个结果。在
http://docs.python.org/2/howto/regex.html#greedy-versus-non-greedy
re.findall(r'<(title)>(.*?)<(/title)>', a)
在*后面添加一个?,这样它将是非贪心的。在
*
?
如果只需要一个匹配项,请使用re.search而不是{}:
re.search
>>> s = '<title>aaa</title><title>aaa2</title><title>aaa3</title>' >>> import re >>> re.search('<title>(.*?)</title>', s).group(1) 'aaa'
如果您想要所有标记,那么您应该考虑将其更改为非贪心的(即-.*?):
.*?
但要考虑使用beauthoulsoup或lxml或类似的方法来解析HTML。在
使用非贪婪搜索代替:
问号表示要尽可能少地匹配字符。现在findall()将返回所需的每个结果。在
http://docs.python.org/2/howto/regex.html#greedy-versus-non-greedy
在
*
后面添加一个?
,这样它将是非贪心的。在如果只需要一个匹配项,请使用}:
re.search
而不是{如果您想要所有标记,那么您应该考虑将其更改为非贪心的(即-
^{pr2}$.*?
):但要考虑使用beauthoulsoup或lxml或类似的方法来解析HTML。在
相关问题 更多 >
编程相关推荐