【问题标题】:How to get the match number n ? regex如何获得比赛号码 n ?正则表达式
【发布时间】:2014-11-29 13:51:15
【问题描述】:

我有这个 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}&gt;(.*?)&lt;/div&gt;',x,re.S)

但我得到了无效的重复错误,因为我是用户 {3},如何获得第三个匹配项?

【问题讨论】:

  • 不要用正则表达式解析 HTML!使用 BeautifulSoup 库来做到这一点。

标签: python regex python-2.7


【解决方案1】:

通过 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'

【讨论】:

  • [-1] 从列表中选择最后一个值。
  • @david :请注意,Avinash Raj 的正则表达式假定在值编号之后总是至少有一个空格。虽然正则表达式解决方案比使用 BeautifulSoup 更短,而且对于这个相对简单的示例来说也可以,但实际上您应该使用正确的 HTML 解析并避免在 HTML 上使用正则表达式。
猜你喜欢
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多