C#Regex从每个HTML TR元素中获取2条信息 - 位于不同的TD元素内

时间:2014-11-25 08:50:32

标签: c# regex

鉴于以下HTML ...

<table>
    <tr>
        <td><strong>Name 1</strong></td>
        <td>Info and ignore <a href="/gohere"/>this</a></td>
        <td><a href="MySpecialAction?field=&list=10000">Edit</a></td>
    </tr>
    <tr>
        <td><strong>Name 2</strong></td>
        <td>Info and ignore <a href="/gohere"/>this</a></td>
        <td><a href="MySpecialAction?field=&list=10001">Edit</a></td>
    </tr>
</table>

是否有可能编写一个C#Regex,它将获取'name'(找到td / strong)和'listid'(找到包含MySpecialAction的href)?

我已经抓住了这个名字(可能效率不高,但是我希望我能写一个表达式,如上所述,将有2个匹配,每个匹配将有两个组(名为'name'和'id' )。

<strong\b[^>]*>(.*?)<\/strong>

Match1.name=Name 1  
Match1.id=10000  
Match2.name=Name 2  
Match2.id=10001  

提前致谢。

1 个答案:

答案 0 :(得分:0)

用正则表达式解析html当然充满了危险和奇点。但是 IF 你正在做一个快速而又脏的脚本而且你假设你的html结构并不奇怪且没有嵌套,并且 IF 你真的想要填充两个基本上不相关的正则表达式单个模式解析出你的两个标记, IF 你的href总是被双引号括起来,而不是单引号,(等)你可以尝试this

/(?:<strong\b[^>]*>(?<name>.*?)<\/strong>|MySpecialAction\?.*?list=(?<id>[^&"]+))/

这适用于您的给定输入,并将令牌捕获到命名组“name”和“id”。 (每场比赛一个名为小组,相应地进行测试!)