2014-11-25 56 views
0

考虑下面的HTML里面......C#正则表达式抢到2个信息从每个HTML元素的TR - 位于不同的TD元素

<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#正则表达式那会抢'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 

在此先感谢。

+2

为什么不使用html解析器? – spender 2014-11-25 08:54:01

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags。不要使用正则表达式来解析html! – mybirthname 2014-11-25 08:55:14

+0

@spender请指教一下'html parser'是什么?我并不是想要解析整个HTML体,而是从html中抽取几个字符串。我把html看作是一个简单的'大字符串'和Regex作为匹配'string'部分的工具。很明显,我在这些领域的知识水平偏低。很高兴使用最简单的方法(并且非常简单地阅读,我从来没有花时间学习正则表达式语法)是正确的工具。 – Terry 2014-11-25 15:10:49

回答

0

解析与正则表达式的HTML,当然,充满了危险和奇异性。但IF你正在做一个快速和肮脏的脚本,我们假定你是你的html结构并不奇怪也没有嵌套,并且IF你真想补习班2个基本无关的正则表达式到一个单一的模式来解析出你的两个记号,​​并IF您的HREF总是用双引号,而不是单引号,(等),你可以尝试this

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

这适用于您的给定输入,并将令牌捕获到名为“name”和“id”的组中。 (每个匹配一个名为组,测试相应!)

+0

所以,这似乎几乎完全是我需要的......绝对足以满足我的需求。我点击了上面关于不使用正则表达式的链接,而是使用'HtmlParser'的链接......我想a)我在html中使用正则表达式时感到困惑,立即被标记为错误,b)你在调用一个Html解析器? c)尝试其他机制(即XElement和查询)也有问题,当HTML不正确Xml,我试图抓住一些东西的HTML。感谢您的回答,并会看到有人评论我为什么选择这样一个糟糕的工具来完成这项工作。 – Terry 2014-11-25 09:37:25

+0

(十)HTML是太奇怪,复杂和嵌套可靠的解析与正则表达式 - 你会惊讶什么可以传递“合法”(X)的HTML和搞砸你的正则表达式。如果这是你第一次阅读Bobince的史诗般的咆哮,那么你的夜晚已经改善了! :) – sweaver2112 2014-11-25 09:42:28

+0

如果我读了,或改进了,如果这是我第一次遇到它,会有所改进吗? :) – Terry 2014-11-25 15:04:46