在一行中查找相同两个单词中的第二个

时间:2013-09-11 03:49:45

标签: python

我正在使用line.rfind()来查找html页面中的某一行,然后我将该行拆分为拉出单个数字。例如:

position1 = line.rfind('Wed')

这找到了这行特殊的html代码:

 <strong class="temp">79<span>&deg;</span></strong><span class="low"><span>Lo</span> 56<span>&deg;</span></span>

首先,我要提取'79',这是通过以下代码完成的:

if position1 > 0 :
        self.high0 = lines[line_number + 4].split('<span>')[0].split('">')[-1]

这完美无缺。我遇到的问题是试图从那行html代码中提取'56'。我不能把它分开'&lt;跨度&GT;”和'&lt; /跨度&GT;自从第一个'&lt;跨度&GT;”它发现在'79'之后。有没有办法告诉脚本寻找第二次出现的'&lt;跨度&GT;'

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

Concerns about parsing HTML with regex aside,我发现正则表达式对于从有限的机器生成的HTML中获取信息非常有用。

你可以用这样的正则表达式取出两个值:

import re
matches = re.findall(r'<strong class="temp">(\d+).*?<span>Lo</span> (\d+)', lines[line_number+4])
if matches:
    high, low = matches[0]

考虑一下这种快速和肮脏:如果你依赖它来完成一项工作,你可能想要使用像BeautifulSoup这样的真正的解析器。

答案 1 :(得分:1)

import re

html = """
 <strong class="temp">79<span>&deg;</span></strong><span class="low"><span>Lo</span> 56<span>&deg;</span></span>
"""

numbers = re.findall(r"\d+", html, re.X|re.M|re.S)
print numbers

--output:--
['79', '56']

使用BeautifulSoup:

from bs4 import BeautifulSoup

html = """
<strong class="temp">
    79
    <span>&deg;</span>
</strong>
<span class="low">
   <span>Lo</span> 
   56
   <span>&deg;</span>
</span>
"""

soup = BeautifulSoup(html)
low_span = soup.find('span', class_="low")

for string in low_span.stripped_strings:
    print string

--output:--
Lo
56
°