python - 如何确保 re.findall() 停在正确的位置?

标签 python regex python-2.7 findall

这是我的代码:

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

结果是:

[('title', 'aaa</title><title>aaa2</title><title>aaa3', '/title')]

如果我曾经设计过一个爬虫来获取网站标题,我最终可能会得到类似这样的东西而不是网站标题。

我的问题是,如何限制 findall到一个<title></title>

最佳答案

如果您只想要一个匹配项,请使用 re.search 而不是 re.findall:

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

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

print re.findall(r'<title>(.*?)</title>', s)
# ['aaa', 'aaa2', 'aaa3']     

但真的要考虑使用 BeautifulSoup 或 lxml 或类似的工具来解析 HTML。

关于python - 如何确保 re.findall() 停在正确的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765805/

相关文章:

python - 取模求未知值

Python - pyparsing unicode字符

php - 正则表达式解析文章中的自定义短代码子字符串并生成数组

regex - htaccess RewriteCond 问题

python-2.7 - 忽略日期时间戳pandas parse_dates的时区偏移部分

python - 在 Python 中比较日期字符串

regex - Java 应用程序和 grep - 我如何独立处理使用两个正则表达式传递给 grep 的命令输出?

python - Python 的机器人框架关键字 : Error with unmatched string or IP. 如何解决此问题?

python - 在 'For' 循环内调用函数会抛出 NameError

python - 使用字典和数组将点符号字符串转换为嵌套的 Python 对象