C# Regex选择{}之间的值,并使用此选定值替换为新字符串

C# Regex选择{}之间的值,并使用此选定值替换为新字符串,c#,regex,string,replace,C#,Regex,String,Replace,我正在尝试替换大量数据中的字符串,我希望使用正则表达式对文本进行某些更新,我应该指出,我对正则表达式相当陌生 这就是我想要实现的目标。在我正在转换的文本中,我们有以下数据{0}{1}{2},必须将其转换为新格式,以便 {0}变成%{param0},{1}变成%{param1},{2}变成%{param2} 这个数字没有限制,到目前为止已经达到16个,将来可能还会增加(应该指出的是,这个数字实际上是一个字符串)。这是我到目前为止的代码,但它只将值更新为{param0}。此外,如果文本包含多个实例,

我正在尝试替换大量数据中的字符串,我希望使用正则表达式对文本进行某些更新,我应该指出,我对正则表达式相当陌生

这就是我想要实现的目标。在我正在转换的文本中,我们有以下数据{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}”);

谢谢,我想我还得多读一些关于正则表达式的书。