C#:如何使用正则表达式匹配字符串'@A=1,@B=2,@C=3,…”;
我有一根类似这样的绳子 @A1=1、@B1=2、@C1=3、@D2=4123、@D3='asdsd' 字符串长度未定义 如何使用正则表达式获取每个变量名的值 预期结果是 A1是1 B1是2 C1是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; 这是一个示例一个组只为每个分组创建一次(..)构造-
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*(.*?)(?=,|$)