Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何使用正则表达式匹配字符串'@A=1,@B=2,@C=3,…”;_C#_Regex - Fatal编程技术网

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

C#:如何使用正则表达式匹配字符串'@A=1,@B=2,@C=3,…”;,c#,regex,C#,Regex,我有一根类似这样的绳子 @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; 这是一个示例一个组只为每个分组创建一次(..)构造-

我有一根类似这样的绳子

@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;
这是一个示例

一个组只为每个分组创建一次
(..)
构造
-这与组实际“重复”(例如使用
+
)的次数无关,以匹配
Regex#match
调用中的输入

用正则表达式直接解决这个问题-

  • 使用“全局匹配”(global match),删除正则表达式中的重复组修饰符,并让正则表达式的重新应用程序找到每个组(这将生成一组匹配结果,每个结果都具有相同的组集);或

  • 为每个@字母创建硬编码组。。手动构造。(这只适用于一组固定的字段,但很快就会变得笨拙。)

或者,如果可能的话-

  • 首先使用
    String#Split
    (或
    Regex#Split
    )简化问题,然后处理生成的零件序列

Wrt“似乎不起作用”有几个迫在眉睫的问题,忽略了上述分组问题和Joel在评论中提出的其他问题-

  • 正则表达式不考虑
    后面的空格(可能这只是标题中的一个错误?)

  • 多个字符串会轻易地破坏它,因为
    '.+'
    是贪婪的,并且会“吃掉”一些参数对

没有实际的输入和实际的“不工作”数据
难以进一步解释;在任何情况下,这两个问题都可以在实现“全局匹配”方法的同时得到解决——fsvo。但它不支持引号中的逗号

@(\w+)=(.*?)(?:,|$)

你可以试试这个。看演示。抓取群组


如何显示
@D3='asdsd'
?参数中是否有
?请尝试改用拆分~其中一个值是否可能包含
@
字符?如果是这样的话,您的输入就不符合“常规”字符串的规范,您将很难找到一个好的表达式来匹配您的值,即使在大多数现代正则表达式引擎中技术上是可行的。此外,这些参数看起来像sql字符串中的参数,如果这就是您在这里看到的,那么您将以完全错误的方式进行操作。
@(\w+)=(.*?)(?:,|$)
@([^=]*)\s*=\s*(.*?)(?=,|$)