提取正则expression式匹配的一部分
我想要一个正则expression式从HTML页面中提取标题。 目前我有这个:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group() if title: title = title.replace('<title>', '').replace('</title>', '')
是否有一个正则expression式只提取内容,所以我不必删除标签?
谢谢!
用正则expression式中的(
)
和python中的group(1)
来检索捕获的string(如果没有find结果, re.search
将返回None
,所以不要直接使用group()
):
title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE) if title_search: title = title_search.group(1)
请不要使用正则expression式来parsing标记语言。 使用lxml或beautifulsoup。
尝试使用捕获组:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
尝试:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)
使用正则expression式来parsingHTML通常不是一个好主意。 你可以使用像美丽的汤任何HTML分析器。 看看http://www.crummy.com/software/BeautifulSoup/documentation.html
还要记住, 有些人遇到问题时,会想:“我知道,我会用正则expression式”。 现在他们有两个问题。
提供的代码段不能应付Exceptions
我可以build议
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
如果没有find模式,或者第一个匹配,默认返回一个空string。
我可以向你推荐美丽的汤。 汤是一个非常好的lib来parsing所有的html文档。
soup = BeatifulSoup(html_doc) titleName = soup.title.name
我认为这应该足够了:
#!python import re pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE) pattern.search(text)
假设你的文本(HTML)是在一个名为“text”的variables中。
这也假设没有其他HTML标签可以合法地embedded到HTML TITLE标签中,也没有办法在这样的容器/块中合法地embedded任何其他的<字符。
不过 …
不要在Python中使用正则expression式进行HTMLparsing。 使用HTMLparsing器! (除非你要编写一个完整的parsing器,当各种HTML,SGML和XMLparsing器已经在标准库中时,这将是一个额外的工作。
如果您处理“真实世界” 标签汤 HTML(这是经常不符合任何SGML / XMLvalidation程序),然后使用BeautifulSoup包。 它不在标准库(尚)中,但为此目的被广泛推荐。
另一种select是: lxml …这是为正确的结构(符合标准的)HTML编写的。 但是它有一个选项可以使用BeautifulSoup作为parsing器: ElementSoup 。