Python正则表达式提取HTML标签内的文本

时间:2016-03-31 14:26:17

标签: python html regex

请考虑以下事项:

<div id=foodmenu>
    <a href="randomlink">Hot Dog</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Burger</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Chips</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Coke</a>
</div>

如何使用正则表达式打印出以下内容:

Hot Dog
Burger
Chips
Coke

2 个答案:

答案 0 :(得分:2)

一种非正则表达式,基于HTML解析器的方法(使用BeautifulSoup HTML解析器):

from bs4 import BeautifulSoup

data = """
<div id=foodmenu>
    <a href="randomlink">Hot Dog</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Burger</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Chips</a>
</div>
<div id=foodmenu>
    <a href="randomlink">Coke</a>
</div>"""

soup = BeautifulSoup(data, "html.parser")
print([link.get_text() for link in soup.select("#foodmenu > a")])

打印:

['Hot Dog', 'Burger', 'Chips', 'Coke']

答案 1 :(得分:1)

不使用RegEx解析HTML ,但如果您坚持:

<a[^>]*>(.*?)</a>

数据存储在 Capture Group#1

Live Demo on Regex101

如果<a>标记之间的数据位于单独的行和/或包含缩进,请使用此RegEx:

<a[^>]*>\s*((?:.|\n)*?)</a>

Live Demo on Regex101