"__amp" "#" -> "__hsh" "1" -> "5" "5" -> "6" 例如,对于下面的输入字符串 "a1as-6ren">
gpt4 book ai didi

c# - 正则表达式替换多个组

转载 作者:IT王子 更新时间:2023-10-29 04:36:52 24 4
gpt4 key购买 nike

我想用正则表达式用相应的替换字符串替换多个组。

替换表:

  • "&" -> "__amp"
  • "#" -> "__hsh"
  • "1" -> "5"
  • "5" -> "6"

例如,对于下面的输入字符串

"a1asda&fj#ahdk5adfls"

对应的输出字符串为

"a5asda__ampfj__hshahdk6adfls"

有什么办法吗?

最佳答案

给定一个定义你的替换的字典:

IDictionary<string, string> map = new Dictionary<string, string>()
{
{"&","__amp"},
{"#","__hsh"},
{"1","5"},
{"5","6"},
};

您可以使用它来构建正则表达式,并为每个匹配项形成替换:

var str = "a1asda&fj#ahdk5adfls";
var regex = new Regex(String.Join("|",map.Keys));
var newStr = regex.Replace(str, m => map[m.Value]);
// newStr = a5asda__ampfj__hshahdk6adfls

实例:http://rextester.com/rundotnet?code=ADDN57626

这使用了 Regex.Replace允许您为替换指定一个 lambda 表达式的重载。


评论中指出,其中包含正则表达式语法的查找模式将无法按预期工作。这可以通过使用 Regex.Escape 来克服。并对上面的代码做一个小改动:

var str = "a1asda&fj#ahdk5adfls";
var regex = new Regex(String.Join("|",map.Keys.Select(k => Regex.Escape(k))));
var newStr = regex.Replace(str, m => map[m.Value]);
// newStr = a5asda__ampfj__hshahdk6adfls

关于c# - 正则表达式替换多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com