我正在尝试解析html页面并从表格行中提取2个值。 表格行的html如下: -
<tr>
<td title="Associated temperature in (ºC)" class="TABLEDATACELL" nowrap="nowrap" align="Left" colspan="1" rowspan="1">Max Temperature (ºC)</td>
<td class="TABLEDATACELLNOTT" nowrap="nowrap" align="Center" colspan="1" rowspan="1">6</td>
<td class="TABLEDATACELLNOTT" nowrap="nowrap" align="Center" colspan="1" rowspan="1"> 13:41:30</td>
</tr>
我现在的表达是:
<tr>[\s]<td[^<]+?>Max Temperature[\w\s]*</td>[\s]
<td[^<]+?>(?<value>([\d]+))</td>[\s]
<td[^<]+?>(?<time>([\d\:]+))</td>[\s]</tr>
但是我似乎无法提取任何匹配项。 任何人都可以指出我正确的方向,谢谢。
答案 0 :(得分:4)
众所周知,使用regexp可靠地解析HTML是非常困难的。
我想我会寻找一个HTML解析库,或者一个“屏幕抓取”库;)
如果HTML来自不可靠的来源,则必须格外小心处理恶意HTML语法。糟糕的HTML处理是安全攻击的主要来源。
答案 1 :(得分:1)
尝试
<tr>\s*
<td[^>]*>.*?</td>\s*
<td[^>]*>\s*(?<value>\d+)\s*</td>\s*
<td[^>]*>\s*(?<time>\d{2}:\d{2}:\d{2})\s*</td>\s*
</tr>\s*
答案 2 :(得分:0)
当你写<td[^<]+?>
时,我猜你的意思是<td[^>]*>
那是“开口大括号,td,也许不是关闭大括号......”
答案 3 :(得分:0)
<tr>[\s]<td[^<]+?>Max Temperature[\w\s]*</td>[\s]
还没有看完它,但是当你试图匹配所有非&gt;时,[^&lt;]可能需要[^&gt;]。直到&gt;那是在Max温度之前。
答案 4 :(得分:0)
关闭td之前的“(ºC)”匹配:
<tr>[\s]<td[^<]+?>Max Temperature[^<]*</td>[\s]
这是一个字边界吗?我认为那里有点棘手,我会采用更通用的方法。
在第三行,td标签后面有一个空格,是否占了?
<td[^<]+?>[\s]?(?<time>([\d\:]+))</td>[\s]</tr>
答案 5 :(得分:0)
我使用http://www.regexbuddy.com/进行此类控制。 到目前为止,我测试了@ sgehrig的建议是正确的
答案 6 :(得分:0)
使用Html Agility Pack或类似的库,正如@Bjarke Ebert建议的那样。这是完成任务的正确工具。