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;

C#:如何使用正则表达式匹配字符串'@A=1,@B=2,@C=3&”;

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