Python - 使用通配符字符串匹配从网站的源代码

时间:2017-12-12 12:53:28

标签: python regex string-matching

我正在使用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”后遇到的第一个浮点数。

如果问题不够明确,我很高兴使用正则表达式并道歉。

1 个答案:

答案 0 :(得分:0)

我已经能够使用 lookbehind断言结合 ungreedy 搜索来实现这一目标:

(?<=Average).*?(?<=<\/sup>)([0-9.]{5})

此工作示例here

<强>解释

  • ([0-9.]{5}):在以下三点之后寻找5个字符组合0到9和点。

    1. (?<=Average) Average 一词必须出现在
    2. 之前
    3. .*?:之间的任何数量的字符。非贪婪(尽可能减少角色)
    4. (?<=<\/sup>):标记</sup>必须出现在
    5. 之前

您正在寻找的号码将位于第一个捕获组