2012-02-10 34 views
1

我試圖抓取的網頁並獲取所有有趣的元素與正則表達式包括以下條款:正則表達式用CRLF匹配<value>

<font\s+face=""Arial"">(?<value>.+)</font> 

我也不是很明白爲什麼有一個「?」之前我的「<價值>」,如果有人能解釋我(這種語法的作品)。

每個匹配的表情,讓我的價值這樣的:

var value = m.Groups["value"].Value; 

我唯一的問題是,當我<值>包括CRLF這甚至不是匹配的,如果我指定「RegexOptions.Multiline」在C#中。

感謝您的回答。的Regex

+0

或者你可以使用[HTML敏捷性包(http://htmlagilitypack.codeplex.com/),並得到準確的結果... – TrueWill 2012-02-11 21:32:56

回答

-1

方言不同,但對你的換行符問題,尋找一個Regex標誌或者叫做MULTILINE和/或DOTALL

如果唯一的問題是換行符,其中一個應該修復它。

我不能回答這個角度支架的一部分,我認爲這是特定於您的Regex方言,以及(在C#)

+0

我使用此語法解決我的問題: (?。+(\ n。*)?) – 2012-02-11 21:17:26

1

括號是正則表達式匹配的部分,(?<name>pattern)名稱分配給匹配括號內,這就是爲什麼你可以參考匹配...Groups["value"]...而不是匹配的數字,正如通常與正則表達式一樣

使用RegexOptions.SingleLine來解決你的問題; (DOTALL在其他正則表達式中)。

澄清:RegexOption.MultiLine改變的^$RegexOptions.SingleLine.含義的含義;我發現了一個完整的列表在這裏:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx

0

我解決了使用此語法我的問題:

(?<value>.+(\n.*)?) 

,但現在我不明白的其他東西。爲什麼當我有這個字符串:

style='font-family:Arial; font-size:10pt; mso-bidi-font-size:10.0pt;mso-bidi-font-family:"Times New Roman"'>Milord</span></b></p> 

術語「老爺」不<值匹配>使用此模式:

style='font\-family\:Arial;\s+font\-size\:10pt;\s+mso\-bidi\-font\-size\:10\.0pt;mso\-bidi\-font-family\:\n?"Times\s+New\s+Roman"'>(<font\s+face="Arial">?)(?<value>.+(\n.*)?)(</font>?)</span></b></p> 

,而我已指定這些字符串作爲可選

(<font\s+face="Arial">?) 
(</font>?) 

我真的不明白,我嘗試了很多與「?」不同的地方語法沒有什麼是我的預期結果!

+0

請不要問一個問題作爲你自己的問題的答案,請;編輯您的原始問題以反映您對問題的新理解。 – 2012-02-12 05:39:31

+0

在括號內?在它前面最小可能的模式是可選的,在這種情況下,這兩次都是'>' - 你想要不匹配的分組,這在大多數的口味中都是可選的(?:)?,注意第二個''的位置? '?請閱讀正則表達式語法。我推薦o'reilly的「貓頭鷹」一書作爲優秀的資源和學習材料。 – 2012-02-12 05:44:41