[英]C#: How to use regex to match string '@A=1, @B=2, @C=3, …"
我有这样的字符串。
@ A1 = 1,@ B1 = 2,@ C1 = 3,@ D2 = 4123,@ D3 = 'asdsd',...
字符串长度是不确定的。
如何使用正则表达式获取每个变量名称的值?
预期结果是
A1是1
B1是2
C1是3
这是我的初始代码,但这似乎不起作用。
Regex exp = new Regex(@"((@[\w]+=('.+'|[\d\.]+),?)+?)+");
GroupCollection gc = exp.Match(strArg).Groups;
string txt = @"@A1=1,@B1=2,@C1=3,@D2=4123,@D3='asdsd'";
string patten = @"@([^=]*)=([^,]*)";
foreach (Match m in Regex.Matches(txt, patten))
{
Console.WriteLine(string.Format("{0} is {1}", m.Groups[1].Value, m.Groups[2].Value));
}
这是一个例子
对于每个分组(..)
构造, 仅创建一次组 -这与实际“重复”(例如,用+
)一个组以匹配Regex#Match
调用中的输入的次数无关 。
要使用正则表达式直接解决此问题,请-
使用“全局匹配”( Regex#Matches
),删除正则表达式中的repeat-group修饰符,然后让正则表达式的重新应用找到每个组(这将产生一组匹配结果,每个结果都具有相同的一组基团); 要么
手动为每个 @letter ..构造创建一个硬编码组。 (这仅适用于一组固定的字段,但是很快就会变得笨拙。)
另外,如果可能的话-
String#Split
(或Regex#Split
)简化问题,然后处理生成的零件序列。 WRT“似乎无法正常工作”有几个直接的问题,而忽略了前面提到的分组问题,其他问题,并由Joel在评论中提出-
正则表达式不走位后,
考虑(也许这只是在标题有误?)
多个字符串会轻易破坏它,因为'.+'
是贪婪的,并且会“吞噬”某些参数对
如果没有实际的输入和实际的 “无效”数据,则很难进一步说明/解释它。 在任何情况下,都可以在实施“全局匹配”方法的同时解决这两个问题-fsvo。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.