如何在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..." }
如何用正则表达式做到这一点?
这个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);
}