在尝试对字符串中的特定数字进行字符串或正则表达式替换时遇到一点问题。
例如,在字符串中
@1 is having lunch with @10 @11
我想用如下所示的相应值替换“ @ 1”,“ @ 10”和“ @ 11”。
"@1" replace with "@bob"
"@10" replace with "@joe"
"@11" replace with "@sam"
所以最终的输出看起来像
"@bob is having lunch with @joe @sam"
尝试
String.Replace("@1", "@bob")
结果如下
@bob is having lunch with @bob0 @bob1
对解决方案有何想法?
假设所有占位符均以@
数字开头且仅包含数字,则可以使用Regex.Replace重载,该重载接受MatchEvaluator委托从字典中选择替换值:
var regex = new Regex(@"@\d+");
var dict = new Dictionary<string, string>
{
{"@1","@bob"},
{"@10","@joe"},
{"@11","@sam"},
};
var input = "@1 is having lunch with @10 @11";
var result=regex.Replace(input, m => dict[m.Value]);
结果将是 "@bob is having lunch with @joe @sam"
与多次String.Replace
通话相比,有一些优点:
@11
必须先于@1
)之所以具有优势3-4,是因为正则表达式将解析输入并创建一个内部表示,其中包含任何匹配项的索引。是时候创建最终的字符串了,它使用StringBuilder从原始字符串中读取字符,但是在遇到匹配项时替换替换值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句