2011-09-15 85 views
0

我有一個字符串,基本上是一個XML節點,我需要提取屬性的值。我嘗試使用下面的C#代碼來實現:使用正則表達式在引號之間獲取字符串

string line = "<log description="Reset Controls - MFB - SkipSegment = True" start="09/13/2011 10:29:58" end="09/13/2011 10:29:58" timeMS="0" serviceCalls="0">" 
string pattern = "\"[\\w ]*\""; 
Regex r = new Regex(pattern); 

foreach (Match m in Regex.Matches(line, pattern)) 
{ 
    MessageBox.Show(m.Value.Substring(1, m.Value.Length - 2)); 
} 

的問題是,這只是從字符串返回最後一次出現(「0」,在上面的例子),當每個字符串包含出現5次。我如何使用C#獲取每個事件?

+1

爲什麼不僅僅像解析XML一樣解析XML? – BoltClock

+0

嘗試使用懶惰修飾符 - 「\」[\\ w] *?\「」。 –

回答

6

不要試圖用正則表達式解析XML。改爲使用XML API。這只是一個真的壞主意嘗試一起破解「足夠的XML解析器」 - 你會得到令人難以置信的脆弱代碼。現在

你行不實際上目前一個有效的XML元素 - 但是如果你添加一個</log>這將是。

XElement element = XElement.Parse(line + "</log>"); 
foreach (XAttribute attribute in element.Attributes()) 
{ 
    Console.WriteLine("{0} = {1}", attribute.Name, attribute.Value); 
} 

這是略有哈克,但它比試圖僞裝XML解析自己更好。

+0

謝謝!!!我同意創建我自己的解析器是一個不好的主意,但我無法嘗試使用XML API。但是一個小調整;由於「foreach不能在方法組上運行...」錯誤,我不得不將元素的屬性添加到()。再次謝謝你! –

+0

@William:哎呀,謝謝,修正了代碼。 –

1

順便說一句,你需要逃避你的字符串雙引號,並添加一個分號:

string line = "<log description=\"Reset Controls - MFB - SkipSegment = True\" start=\"09/13/2011 10:29:58\" end=\"09/13/2011 10:29:58\" timeMS=\"0\" serviceCalls=\"0\">"; 
1

要真正回答你的問題,您應該pattern可能是因爲​​將\w不匹配空格,符號等。

相關問題