如何在c#中通过Regex删除和替换花括号中的另一个值

本文关键字:替换 另一个 删除 Regex | 更新日期: 2023-09-27 17:50:49

我有一个来自客户的XML文档。它们有类似于下面这个的XML文件:

<id>{1}</id> <Name>{2}</Name> <Detail>{3}</Detail>

我想替换{1} -> 123456, {2} -> "mike", {3} ->"Hummer"

foreach(customer customer in List){  "find {1} and replace customer id etc..." }

如何用正则表达式做到这一点?

如何在c#中通过Regex删除和替换花括号中的另一个值

这个xml看起来像是String.Format…你真的需要(复杂的)正则表达式吗?

你就不能那样做吗?

    static void Main(string[] args)
    {
        var f = "<id>{1}</id> <Name>{2}</Name> <Detail>{3}</Detail>";
        var str = String.Format(f, null, "123456", "mike", "Hummer");
        Console.WriteLine(str);
        Console.ReadLine();
    }

输出
<id>123456</id> <Name>mike</Name> <Detail>Hummer</Detail>

由于使用的是XML,因此几乎不需要任何正则表达式来设置带有预定义字符串的标记值。使用XElement:

var xmltxt = "<root><id>{1}</id> <Name>{2}</Name> <Detail>{3}</Detail></root>";
var doc = XElement.Parse(xmltxt);
foreach (var id_node in doc.Elements("id"))
   id_node.Value = "123456";
foreach (var name_node in doc.Elements("Name"))
   name_node.Value = "mike";
foreach (var detail_node in doc.Elements("Detail"))
   detail_node.Value = "Hummer";
Console.WriteLine(doc.ToString());
输出:

<root>
  <id>123456</id>
  <Name>mike</Name>
  <Detail>Hummer</Detail>
</root>

如果您坚持使用正则表达式(如果您碰巧处理一些无效的XML,作为备用):

var rx = new Regex(@"(?<=>)'{'d+'}(?=<)");
var dict = new Dictionary<string, string>();
dict.Add("{1}", "123456");
dict.Add("{2}", "mike");
dict.Add("{3}", "Hummer");
Console.WriteLine(rx.Replace(xmltxt, m => dict[m.Value]));

也许,@fubo的解决方案甚至更好的备用,除非你需要替换{...} s严格在一些标签。

string doc = "<id>{1}</id> <Name>{2}</Name> <Detail>{3}</Detail>";
Dictionary<string, string> sDict = new Dictionary<string, string>();
sDict.Add("{1}", "123456");
sDict.Add("{2}", "Hummer");
sDict.Add("{3}", "foo");
foreach (var item in sDict)
{
    doc = doc.Replace(item.Key, item.Value);
}