我希望有一个正则表达式来提取一个HTML页的标题。目前我有这样的:

title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
    title = title.replace('<title>', '').replace('</title>', '') 

是否有一个正则表达式来提取的<标题>只是内容,所以我不必去除标签?

有帮助吗?

解决方案

在正则表达式和 ( 在使用) group(1)蟒蛇检索捕获的字符串(如果它 re.search 将返回None没有找到的结果,所以不使用group()直接):

title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)

if title_search:
    title = title_search.group(1)

其他提示

尝试使用捕获组:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)

请注意起始Python 3.8,并引入赋值表达式的(PEP 572):=运营商),则可能由if内直接捕获所述匹配结果来改善的KrzysztofKrasoń的溶液位在条件的身体状况作为变量并重新使用它:

# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
  title = match.group(1)
# hello

re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)

所提供的代码片段不与Exceptions应付 我建议

getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]

如果该图案还没有找到这将返回默认空字符串,或第一个匹配。

尝试:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)

我可以建议你到美味的汤。汤是很好的LIB分析所有的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)是在一个名为变量 “文本。”

这还假定有不可合法地嵌入到HTML标题标记和没有办法合法嵌入这种容器/块内的任何其它<字符的内部的其他HTML标签。

<强>然而 ...

不要使用Python中HTML解析正则表达式。使用HTML解析器! (除非你打算写一个完整的解析器,这将是一个额外的工作时各种HTML,SGML和XML解析器已经在标准库。

如果您处理 “真实世界” 的标签汤 HTML(这是经常不符合任何SGML / XML验证),然后使用的 BeautifulSoup 包。这不是在标准库(还),但宽推荐用于此目的。

另一种选择是: LXML ...被用于适当地构造(标准符合性)HTML编写的。但它有一个选项,以还原到使用BeautifulSoup作为解析器: ElementSoup

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top