我正在使用Python中的Web scraper处理一些代码。
鉴于网站的源代码,我需要提取相关的数据点。源代码看起来像这样。
</sup>73.00</span> </td> </tr> <tr class="highlight"> <td><span class="data_lbl">Average</span></td> <td> <span class="data_data"><sup>
</sup>86.06</span> </td> </tr> <tr> <td><span class="data_lbl">Current Price</span></td> <td> <span class="data_data"><sup> </sup>83.20</span> </td>
</tr> </tbody> </table> </div> </div> <!--data-module-name="quotes.module.researchratings.Module"--> </div> <div class="column at8-
col4 at16-col4 at12-col6" id="adCol"> <div intent in-at4units-prepend="#adCol" in-at8units-prepend="#adCol" in-at12units-prepend="#adCol
这是我正在使用的正则表达式
regex = re.compile('Average*</sup>.....')
其目的是在“平均”之后遇到第一个“/ sup”标签后获得5个字符,在这种情况下为“86.06”(虽然我需要在我离开之前清理匹配浮动)。
是否有一种更优雅的方法可以输出在看到字符串“Average”后遇到的第一个浮点数。
如果问题不够明确,我很高兴使用正则表达式并道歉。
答案 0 :(得分:0)
我已经能够使用 lookbehind断言结合 ungreedy 搜索来实现这一目标:
(?<=Average).*?(?<=<\/sup>)([0-9.]{5})
此工作示例here
<强>解释强>
([0-9.]{5})
:在以下三点之后寻找5个字符组合0到9和点。
(?<=Average)
: Average 一词必须出现在.*?
:之间的任何数量的字符。非贪婪(尽可能减少角色)(?<=<\/sup>)
:标记</sup>
必须出现在您正在寻找的号码将位于第一个捕获组