This question already has answers here:
RegEx match open tags except XHTML self-contained tags
(34个答案)
2年前关闭。
由于某些原因,我需要使用正则表达式从网站中提取一些数据。数据具有类似的HTML结构,只是文本有所不同。
为简单起见,我以这种方式显示它:
我只对“性别”感兴趣,这意味着我只想提取“ Herr”和“ Dam”。
到目前为止,我想出了两个选择-都不起作用:
给出:
['Herr']
我猜是因为它不是贪婪的
但是,如果我让它变得贪婪:
它返回:
['靴子']
因此,我正在努力弄清楚如何同时获得“ Herr”和“ Dam”,仅此而已?
输出:
我建议向div添加name属性,以便更容易确定正确的标签
输出:
(34个答案)
2年前关闭。
由于某些原因,我需要使用正则表达式从网站中提取一些数据。数据具有类似的HTML结构,只是文本有所不同。
为简单起见,我以这种方式显示它:
p = '<div class="col-xs-6"><p>Gender:</p></div><div class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
t = '<div class="col-xs-6"><p>Kategori:</p></div><div class="col-xs-6"><a href="/skor/kangor-boots">Boots</a></div>'
s = p + t
我只对“性别”感兴趣,这意味着我只想提取“ Herr”和“ Dam”。
到目前为止,我想出了两个选择-都不起作用:
m = re.findall("Gender.+?<div.+?>([\w ]+)<\/.+?<\/div>", s, re.DOTALL)
给出:
['Herr']
我猜是因为它不是贪婪的
但是,如果我让它变得贪婪:
re.findall("Gender.+?<div.+>([\w ]+)<\/.+?<\/div>", s, re.DOTALL)
它返回:
['靴子']
因此,我正在努力弄清楚如何同时获得“ Herr”和“ Dam”,仅此而已?
最佳答案
您可以通过这种方式使用BeautifulSoup
from bs4 import BeautifulSoup
a='<div class="col-xs-6"><p>Gender:</p></div><div class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
soup = BeautifulSoup(a,"html.parser")
if 'Gender' in (str(soup.findAll('div'))):
for ana in soup.findAll('div'):
for i in ana.findAll('a'):
print(i.next_element)
输出:
Herr
Dam
我建议向div添加name属性,以便更容易确定正确的标签
p = '<div name="Gender" class="col-xs-6"><p>Gender:</p></div><div name="Gender" class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
t = '<div class="col-xs-6"><p>Kategori:</p></div><div class="col-xs-6"><a href="/skor/kangor-boots">Boots</a></div>'
a = p + t
soup = BeautifulSoup(a,"html.parser")
for ana in soup.findAll('div',{"name":"Gender"}):
for i in ana.findAll('a'):
print(i.next_element)
输出:
Herr
Dam
关于python - Python正则表达式:从具有相似结构的html元素获取文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52610930/
10-12 01:56