C# 要分析格式化程序字符串的正则表达式
我正在编写一个类似C# 要分析格式化程序字符串的正则表达式,c#,regex,C#,Regex,我正在编写一个类似字符串.Format的方法。为了做到这一点,我采用正则表达式来确定命令和参数:例如格式(@“\m{0,1,2}”、byteArr0、byteArr1、byteArr2) 对于第一个正则表达式,返回2个组: '\m' '{0,1,2}' 另一个正则表达式的值为“{0,1,2}”,有3个匹配项: 0 1 2 这些值是与byteArr参数相对应的索引 这个命令结构可能会增长,所以我真的想弄清楚这一点,并学习足够多的知识,以便能够修改正则表达式以满足未来的需求。我认为一个正则表
字符串.Format
的方法。为了做到这一点,我采用正则表达式来确定命令和参数:例如格式(@“\m{0,1,2}”、byteArr0、byteArr1、byteArr2)
对于第一个正则表达式,返回2个组:
'\m'
'{0,1,2}'
“{0,1,2}”
,有3个匹配项:
0
1
2
byteArr
参数相对应的索引
这个命令结构可能会增长,所以我真的想弄清楚这一点,并学习足够多的知识,以便能够修改正则表达式以满足未来的需求。我认为一个正则表达式可以完成上述所有工作,但拥有两个单独的正则表达式(es/ices???)是有价值的
无论如何,要获取第一个组'\m'
,正则表达式是:
"(\\)(\w{1,1})" // I want the '{0,1,2}' group also
要获取整数匹配项“{0,1,2}”
,我正在尝试:
"(?<=\{)([^}]*)(?=\})"
(?您的第一个正则表达式(\\)(\w{1,1})
可以大大简化
- 您不希望将
单独捕获到\
,因此无需将它们封装在自己的括号中m
与刚才的\w{1,1}
相同\w
\\\w
来匹配第一部分\m
现在来处理第二部分,实际上我们可以忽略示例中除0,1,2
之外的所有内容,因为其他地方没有数字,所以您只需使用:\d+
并迭代匹配
但是让我们假设这个例子实际上可能是\9{1,2,3}
现在\d+
将匹配9
,因此为了避免这种情况,我们可以使用[{,](\d+[,}]
。这表示捕获一个数字,该数字的左边是,
或{
,右边是,
或
你说得对,我们可以用一个正则表达式匹配整个字符串,类似这样的东西可以做到:
(\\\w){((\d+),?)+}
但是,问题是,当您事后检查捕获组的内容时,(\d+)
捕获的最后一个数字将覆盖在其中捕获的所有其他值。因此,对于您的示例,只剩下组1:\m
和组2:2
考虑到这一点,我建议使用2个正则表达式:
对于第一部分:\\\w
对于数字:我忘记了[{,](\d+[,}]
(以及其他许多方法),最干净的方法可能就是抓取{…}
中的任何内容,然后与一个简单的\d+
匹配
为此,首先使用(\\\w)\{([^/}]+\}
将\m
抓取到第1组,将1,2,3
抓取到第2组,然后使用\d+
仅供参考,您的
(?考虑以下正则表达式
(^.*?)(?={.*})
\d+
祝你好运