2014-11-25 32 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