簡體   English   中英

使用正則表達式獲取引號之間的字符串

[英]Get string between quotes using regex

我有一個基本上是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));
}

問題在於,當每個字符串包含5個匹配項時,這僅返回字符串中的最后一個匹配項(在上例中為“ 0”)。 我如何使用C#來獲取所有事件?

不要嘗試使用正則表達式解析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);
}

有點 hacky,但是比嘗試偽造XML解析要好。

順便說一句,您需要將字符串轉義為雙引號並添加分號:

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\">";

要實際回答您的問題,您的pattern應該為"\\"[^\\"]*\\""因為\\w將不匹配空格,符號等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM