繁体   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