正则表达式很慢。试图提取多个字符串

时间:2012-10-26 19:54:42

标签: regex

我对正则表达式相当新,并且使用Notepad ++练习一点。我试图从雅虎提取一些股票相关数据,但有点缺乏经验。也许有人可以帮我一臂之力。非常感谢。

我尝试解析的一个例子是:

<strong>230.00</strong></a></td><td class="yfnc_tabledata1"><a href="http://ca.finance.yahoo.com/q?s=AMZN121026C00230000">AMZN121026C00230000</a></td><td class="yfnc_tabledata1" align="right"><b>9.35</b></td><td class="yfnc_tabledata1" align="right"><span id="yfs_c10_amzn121026c00230000"><img style="margin-right:-2px;" src="op_files/up_g.gif" alt="Up" border="0" height="14" width="10"> <span class="yfi-price-change-green">0.35</span></span></td><td class="yfnc_tabledata1" align="right">9.25</td><td class="yfnc_tabledata1" align="right">9.40</td><td class="yfnc_tabledata1" align="right">3,857</td><td class="yfnc_tabledata1" align="right">1,041</td></tr><tr><td class="yfnc_tabledata1" nowrap="nowrap">

我基本上尝试提取数字230.00,9.35,0.35,9.25,9.40,3,857,1041。什么 我到目前为止所管理的是:

<strong>(\d.*?)</strong>.*?<b>(.*?)<

但它确实很慢。到目前为止这是正确的吗?

2 个答案:

答案 0 :(得分:0)

可能更快的变体可能是(?<=>)(\d{1,3}(?:,\d{3})*+(?:\.\d+)?)(?=<) 它只匹配&gt;之间的数字。和&lt;忽略其余的......

但请记住,就像SomeKittens说的那样:“一般来说,用正则表达式解析HTML是一个坏主意....”

答案 1 :(得分:0)

Demo

您可以使用此示例,将匹配tag及其编号,以便您可以随意使用它们。您甚至可以按[a-z]+

更改(span|b|td|whatever)的标记进行过滤