C# Regex选择{}之间的值,并使用此选定值替换为新字符串
我正在尝试替换大量数据中的字符串,我希望使用正则表达式对文本进行某些更新,我应该指出,我对正则表达式相当陌生 这就是我想要实现的目标。在我正在转换的文本中,我们有以下数据{0}{1}{2},必须将其转换为新格式,以便 {0}变成%{param0},{1}变成%{param1},{2}变成%{param2} 这个数字没有限制,到目前为止已经达到16个,将来可能还会增加(应该指出的是,这个数字实际上是一个字符串)。这是我到目前为止的代码,但它只将值更新为{param0}。此外,如果文本包含多个实例,则只更新第一个实例C# Regex选择{}之间的值,并使用此选定值替换为新字符串,c#,regex,string,replace,C#,Regex,String,Replace,我正在尝试替换大量数据中的字符串,我希望使用正则表达式对文本进行某些更新,我应该指出,我对正则表达式相当陌生 这就是我想要实现的目标。在我正在转换的文本中,我们有以下数据{0}{1}{2},必须将其转换为新格式,以便 {0}变成%{param0},{1}变成%{param1},{2}变成%{param2} 这个数字没有限制,到目前为止已经达到16个,将来可能还会增加(应该指出的是,这个数字实际上是一个字符串)。这是我到目前为止的代码,但它只将值更新为{param0}。此外,如果文本包含多个实例,
NewText = Regex.Replace(NewText , @"(?<=\{).*(?=\})", "param$0");
<代码> NeXTetry=正则表达式。替换(NeXTEXT,@)(.< P>除非您真的需要使用正则表达式来找到您的模式,否则您可能需要考虑<代码>字符串。替换或<代码> StringBuilder。替换< /代码>。参考更多信息:或< P> >可以写:
NewText = Regex.Replace(NewText , @"\{(0|[1-9]\d*)}", "%{ param$1 }");
关于这一点:
此外,如果文本包含多个实例,则只更新第一个实例
真正发生的是,如果字符串是{0}{1}{2}
,那么代码将用param0}{1}{2
部分替换param0}{1}{2
,给出最终结果{param0}{1}{2}
。看起来它只是在更新第一个实例,但实际上它所做的是更新所有实例,就好像它们是单个实例一样。这是因为*
符号在允许正则表达式匹配的情况下尽可能多地吞咽
替换参数指定要替换输入中每个匹配项的字符串。替换可以由文字文本和替换项的任意组合组成。例如,替换模式a*${test}b插入字符串“a*”,后跟与测试捕获组(如果有)匹配的替换项,后跟字符串“b”“。在替换模式中,*字符不被识别为元字符
这意味着您可以简单地使用捕获组来保持数字不变。请尝试
newText = Regex.Replace(newText, @"\{(?<Num>\d+)\}", "%{param${num}}");
newText=Regex.Replace(newText,@“{(?\d+)\}”,“%{param${num}”);
谢谢,我想我还得多读一些关于正则表达式的书。