C#:如何使用正则表达式匹配字符串'@A=1,@B=2,@C=3&”;
本文关键字:#39@A 何使用 正则表达式 字符串 | 更新日期: 2023-09-27 18:08:04
我有一个类似这样的字符串。
@A1=1,@B1=2,@C1=3,@D2=4123,@D3='asdsd',。。。
字符串长度未定义。
如何使用Regex获取每个变量名称的值?
预期结果为
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
(,删除正则表达式中的重复组修饰符,并让正则表达式的重新应用程序找到每个组(这会产生匹配结果的集合,每个结果都具有相同的组集(;或为@letter的每个创建一个硬编码组。。手动构造。(然而,这只适用于固定的字段集,并且可能很快变得难以处理。(
或者,如果可能-
- 首先使用
String#Split
(或Regex#Split
(简化问题,然后处理生成的零件序列
Wrt"似乎不起作用",有几个直接的问题,忽略了前面提到的分组问题,其他问题,并由Joel在评论中提出-
正则表达式不考虑
,
后面的空格(也许这只是标题中的错误?(由于
'.+'
是贪婪的,并且会"吃掉"一些参数对,因此多个字符串会琐碎地破坏它
如果没有实际输入和"无效"数据难以进一步推理/解释;在任何情况下,这两个问题都可以在实现"全局匹配"方法的同时得到解决。
下面是我快速创建的正则表达式。不过,它不支持引号中的逗号。
@('w+)=(.*?)(?:,|$)
Regex101
@([^=]*)'s*='s*(.*?)(?=,|$)
你可以试试这个。请参阅演示。抓住小组。
https://regex101.com/r/uF4oY4/19