C# 正则表达式问题,将数据提取到组

C# 正则表达式问题,将数据提取到组,c#,.net,regex,C#,.net,Regex,我多么喜欢正则表达式 我有一个字符串,它将是XML的一种变形形式,如: <Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1<

我多么喜欢正则表达式

我有一个字符串,它将是XML的一种变形形式,如:

<Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1</IPAddress>
DIRDL123ABecause42Some Desc127.0.0.1
所有内容都在一行上,但是“标题”通常会有所不同

所以我需要做的是从上面的字符串中提取所有信息,将其放入字典/哈希表中

--

string myString=@“DIRDL123ABecause42Some Desc127.0.0.1”;
//这将提取标题中标签的名称
正则表达式r=新正则表达式(@“(?)”);
//创建匹配项的集合
MatchCollection mc=r.Matches(myString);
foreach(在mc中匹配m)
{
headers.Add(m.Groups[“header”].值);
}
//这将尝试获取值。

r=新的正则表达式(@“(?'val'>[A-Za-z0-9\s]*这应该去掉尖括号:

 Regex r = new Regex(@"<(?<header>[A-Za-z]+)>");
Regex r=newregex(@“);
这将消除空白:

r = new Regex(@">\s*(?'val'[A-Za-z0-9\s]*)\s*</");

r=new Regex(@“>\s*(?'val'[A-Za-z0-9\s]*)\s*这应该去掉尖括号:

 Regex r = new Regex(@"<(?<header>[A-Za-z]+)>");
Regex r=newregex(@“);
这将消除空白:

r = new Regex(@">\s*(?'val'[A-Za-z0-9\s]*)\s*</");

r=new Regex(@“>\s*(?'val'[A-Za-z0-9\s]*)\s*如果它看起来像XML,为什么不使用.net的XML解析器功能呢?只需在它周围添加一个根元素:

string myString = @"<Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1</IPAddress>";

var values = new Dictionary<string, string>();
var xml = XDocument.Parse("<root>" + myString + "</root>");
foreach(var e in xml.Root.Elements()) {
    values.Add(e.Name.ToString(), e.Value);
}
string myString=@“DIRDL123ABecause42Some Desc127.0.0.1”;
var值=新字典();
var xml=XDocument.Parse(“+myString+”);
foreach(xml.Root.Elements()中的var e){
Add(e.Name.ToString(),e.Value);
}

如果它看起来像XML,为什么不使用.net的XML解析器功能呢?您只需在它周围添加一个根元素:

string myString = @"<Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1</IPAddress>";

var values = new Dictionary<string, string>();
var xml = XDocument.Parse("<root>" + myString + "</root>");
foreach(var e in xml.Root.Elements()) {
    values.Add(e.Name.ToString(), e.Value);
}
string myString=@“DIRDL123ABecause42Some Desc127.0.0.1”;
var值=新字典();
var xml=XDocument.Parse(“+myString+”);
foreach(xml.Root.Elements()中的var e){
Add(e.Name.ToString(),e.Value);
}

这将匹配没有以下内容的标题:


(?这将匹配没有以下内容的标题:


(?快告诉我吧。如果可以的话,你应该总是喜欢XML解析器而不是正则表达式。这就是它们的作用。谢谢你。我从来没有想过使用XML解析器,因为它一开始的格式就很糟糕。这让我省了很多正则表达式的麻烦。快告诉我吧。如果可以的话,你应该总是喜欢XML解析器而不是正则表达式。这就是我不能做到的嘿,谢谢你。我从来没有想过使用XML解析器,因为它一开始的格式就不好。这让我省去了很多正则表达式的麻烦。
XDocument doc = XDocument.Parse(string.Format("<root>{0}</root>",myString));
var pairs = doc.Root.Descendants().Select(node => new KeyValuePair<string, string>(node.Name.LocalName, node.Value));