【问题标题】:regex for html parsing (in c#)用于 html 解析的正则表达式(在 c# 中)
【发布时间】:2010-09-21 06:24:47
【问题描述】:

我正在尝试解析 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>

但是我似乎无法提取任何匹配项。 谁能指出我正确的方向,谢谢。

【问题讨论】:

    标签: c# html regex parsing


    【解决方案1】:

    众所周知,使用正则表达式可靠地解析 HTML 非常困难。

    我想我会寻找一个 HTML 解析库,或者一个“屏幕抓取”库;)

    如果 HTML 来自不可靠的来源,您必须格外小心处理恶意 HTML 语法。糟糕的 HTML 处理是安全攻击的主要来源。

    【讨论】:

      【解决方案2】:

      试试

      <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*
      

      【讨论】:

        【解决方案3】:

        当你写&lt;td[^&lt;]+?&gt;时,我猜你的意思是&lt;td[^&gt;]*&gt;

        那是“左大括号,td,也许是关闭大括号以外的东西......”

        【讨论】:

          【解决方案4】:
          <tr>[\s]<td[^<]+?>Max Temperature[\w\s]*</td>[\s]
          

          尚未全部查看,但 [^],因为您要尝试匹配所有非->,直到 > 在 Max temperature 之前。

          【讨论】:

            【解决方案5】:

            结束 td 之前的“ (ºC)” 匹配:

            <tr>[\s]<td[^<]+?>Max Temperature[^<]*</td>[\s]
            

            那 \w 是单词边界吗?我认为那里有点棘手,我会使用更通用的方法。

            第三行,td标签后面多了一个空格,算不算?

            <td[^<]+?>[\s]?(?<time>([\d\:]+))</td>[\s]</tr>
            

            【讨论】:

              【解决方案6】:

              我使用http://www.regexbuddy.com/ 进行此类控制。 到目前为止,我测试了@sgehrig 的建议是正确的

              【讨论】:

                【解决方案7】:

                使用Html Agility Pack 或类似的库,正如@Bjarke Ebert 建议的那样。这是完成任务的正确工具。

                【讨论】:

                  猜你喜欢
                  • 2020-03-14
                  • 2014-05-16
                  • 2011-06-11
                  • 2010-09-08
                  • 2011-01-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多