我正在尝试替换大量数据中的字符串,我希望使用正则表达式来处理我必须对文本进行的某些更新,我应该指出我对正则表达式相当新。
显示这是我想要实现的目标。在我正在转换的文本中,我们有以下数据{0} {1} {2},这必须转换为新格式,以便 {0}变为%{param0},{1}变为%{param1},{2}变为%{param2}。
这个数字没有限制,到目前为止它已达到16并且未来可能上升(应该指出这个数字实际上是一个字符串)。这是我到目前为止的代码,但它只将值更新为{param0}。此外,如果文本包含多个实例,则仅更新第一个实例。
NewText = Regex.Replace(NewText , @"(?<=\{).*(?=\})", "param$0");
谢谢, Brendy
答案 0 :(得分:1)
你可以写:
NewText = Regex.Replace(NewText , @"\{(0|[1-9]\d*)}", "%{ param$1 }");
关于这个:
此外,如果文本包含多个实例,则仅更新第一个实例。
如果您的字符串为{0} {1} {2}
,那么您的代码会将0} {1} {2
部分替换为param0} {1} {2
,最终结果为{param0} {1} {2}
。所以看起来就像只更新第一个实例一样,但它真正做的是更新所有实例,就像它们是单个实例一样。这是因为.*
符号尽可能地吞噬,同时仍允许正则表达式匹配。
答案 1 :(得分:0)
除非您确实需要使用正则表达式来查找模式,否则您可能需要考虑String.Replace
或StringBuilder.Replace
。有关详情,请参阅以下内容:Regex.Replace, String.Replace or StringBuilder.Replace which is the fastest?或Memory Efficiency and Performance of String.Replace .NET Framework
答案 2 :(得分:0)
MSDN documentation for Regex.Replace说
replacement参数指定要替换输入中每个匹配项的字符串。替换可以包含文字文本和替换的任意组合。例如,替换模式a * $ {test} b插入字符串&#34; a *&#34;后跟由测试捕获组匹配的子字符串(如果有),后跟字符串&#34; b&#34;。 *字符在替换模式中不被识别为元字符。
这意味着您只需使用捕获组来保持数字。尝试
newText = Regex.Replace(newText, @"\{(?<Num>\d+)\}", "%{param${num}}");