我有这个 html 文本:
<div>
<div class="item1"> value 1 </div>
\n
<div class="item1"> value 2 </div>
\n
<div class="item1"> value 3 </div>
</div>
div 标签之间存在未知文本:
我想要value 3
我试过这个:re.findall(r'class="item1".*?{3}>(.*?)</div>',x,re.S)
但是我收到无效重复错误,因为我用户为 {3},如何获取第三个匹配项?
最佳答案
通过BeautifulSoup css selectors .
>>> from bs4 import BeautifulSoup
>>> s = """<div>
<div class="item1"> value 1 </div>
<div class="item1"> value 2 </div>
<div class="item1"> value 3 </div>
</div>"""
>>> soup = BeautifulSoup(s)
>>> soup
<html><body><div>
<div class="item1"> value 1 </div>
<div class="item1"> value 2 </div>
<div class="item1"> value 3 </div>
</div></body></html>
>>> [i.string for i in soup.select('div > div[class~=item1]')[-1]]
[' value 3 ']
>>> [i.string.strip() for i in soup.select('div > div[class~=item1]')[-1]]
['value 3']
正如其他人所说,不要使用正则表达式解析 html 文件。
>>> re.findall(r'<div\s+class="item1">\s*(.*?)\s+</div>', s)[-1]
'value 3'
关于python - 如何获得匹配数n?正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203014/