2017-05-11 38 views
0

我需要獲取具有CLASS CLASSIFY的所有SPAN標記。在其中一種情況下,我正在使用的RegEx跳過第一個SPAN標籤。RegEx在C#中獲取具有特定類名的所有SPAN標記

正則表達式

<span [^>]*class=\"classify\"(.*?)</span> 

C#代碼

Regex.Matches(content, "<span [^>]*class=\"classify\"(.*?)</span>", RegexOptions.Multiline) 

內容:

<span categoryid="110" categorytext="(Sup ed (Inl))" class="classify" classifyid="3395349" quoteid="" quotetext="" selectedclassify="true" style="font-weight: bold; background-color: #ffa500"> 
<u>Objective/reason for interaction</u> 
<br /> wtwt 
<br /> &nbsp; 
<br /> <u>Summary</u><br /> As -16/08/15</span> 
<br /> &nbsp; 
<br /> 
<u>Actions</u> 
<br /> N 
<br /> &nbsp; 
<br /> 
<u>Outcomes/reportables</u> 
<br /> 
<span categorytext="(Nofrf of J Ced)" class="classify" quoteid="" quotetext="" selectedclassify="false" style="categoryid=&quot;13416&quot;">1 full </span> 
<br /> A Mag 
<br /> &nbsp; 
<br /> 
<u>K</u> 
<br /> As ab 
<br /> 

鏈接到.NET正則表達式測試儀:

Sample

請指點,我在正則表達式的思念。

+2

HTML **不是**常規語言。您不能使用常規語言解析器(即RegEx)來解析它。您需要使用專門設計的功能,例如[HTML Agility Pack](http://htmlagilitypack.codeplex.com/)。 – Enigmativity

+0

已閱讀此答案:http://stackoverflow.com/a/1732454/259769 – Enigmativity

+0

解析器已就位,因此我無法更改整個代碼以使用HTML Agility Pack。 – AaBa

回答

1

這是因爲默認情況下點不匹配新行。您可以使用[\ S \ S],而不是:

<span [^>]*class=\"classify\"([\s\S]*?)</span> 

或者你可以使用你原來的模式,並設置Singleline option在RegexOptions。

Regex Tester link

+0

完美,這項工作。一個簡單的問題(因爲我的知識非常有限),什麼是最好的解決方案,即使用[\ s \ S]或Singleline選項? – AaBa

+1

我不確定,但我猜他們是相同的。單行文檔說它「改變了點(。)的含義,因此它匹配每個字符(而不是\ n以外的每個字符)。」 [\ s \ S]發現一個空格字符或不空白字符,所以它基本上是做同樣的事情。 –

+0

儘管[\ s \ S]可能對其他語言更具可移植性。 –

相關問題