提取正则表达式匹配的一部分

hoj*_*oju 104 html python regex html-content-extraction

我想要一个正则表达式从HTML页面中提取标题.目前我有这个:

title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
    title = title.replace('<title>', '').replace('</title>', '') 
Run Code Online (Sandbox Code Playgroud)

是否有正则表达式只提取<title>的内容,所以我不必删除标签?

Krz*_*soń 156

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

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

if title_search:
    title = title_search.group(1)
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是大多数人忘记了异常,并且当他们在运行时看到它们时真的很惊讶:) (3认同)
  • 不要忘记运行 `import re` ,否则你会得到 `NameError: name 're' is not Defined` (3认同)

Xav*_*hot 9

请注意,通过开始Python 3.8并引入赋值表达式(PEP 572):=运算符),可以通过直接在if条件中将匹配结果捕获为变量并将其重新用于Krzysztof Kraso?的解决方案,从而有一点改进条件的身体:

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

  • 哦,那很漂亮。 (7认同)

Ran*_*ndy 7

尝试:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用“.*?”,以防文档中存在多个“&lt;/title&gt;”(不太可能,但您永远不知道)。 (2认同)

kha*_*pur 7

我可以向您推荐美丽汤吗?Soup 是一个非常好的库来解析所有 html 文档。

soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Run Code Online (Sandbox Code Playgroud)


Aar*_*paa 6

尝试使用捕获组:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Run Code Online (Sandbox Code Playgroud)


Vin*_*jip 5

re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)
Run Code Online (Sandbox Code Playgroud)