快速及;肮脏的更新方式";IDs";格式为XML(C#)的字符串中

快速及;肮脏的更新方式";IDs";格式为XML(C#)的字符串中,c#,xml,string,parsing,format,C#,Xml,String,Parsing,Format,对于一次性操作,我需要解析XML字符串的内容并更改“ID”字段的编号。但是,我不能冒险更改字符串的任何其他内容,例如空格、换行符等必须保持原样 因为我有过这样的经历,XmlReader往往会弄乱空白,甚至可能会重新格式化XML,所以我不想使用它(但请随意说服我)。这对RegEx来说也很重要,但是。。。我不擅长正则表达式,尤其是.NET实现 这是字符串的一小部分,在某些情况下需要更新ID字段的编号。字符串中可以有许多这样的VAR条目。因此,我需要将每个ID转换为Int32,比较并修改它,然后将其放

对于一次性操作,我需要解析XML字符串的内容并更改“ID”字段的编号。但是,我不能冒险更改字符串的任何其他内容,例如空格、换行符等必须保持原样

因为我有过这样的经历,XmlReader往往会弄乱空白,甚至可能会重新格式化XML,所以我不想使用它(但请随意说服我)。这对RegEx来说也很重要,但是。。。我不擅长正则表达式,尤其是.NET实现

这是字符串的一小部分,在某些情况下需要更新ID字段的编号。字符串中可以有许多这样的VAR条目。因此,我需要将每个ID转换为Int32,比较并修改它,然后将其放回字符串中

<VAR NAME="sf_name" ID="1001210">


我正在寻找最简单(就编码时间而言)和最安全的方法来实现这一点。

您正在寻找的正则表达式模式是:

ID="(\d+)"
匹配组1将包含该编号。使用动态计算的替换来替换匹配项

Regex r = new Regex("ID=\"(\\d+)\"");
string outputXml = r.Replace(inputXml, new MatchEvaluator(ReplaceFunction));
其中,
ReplaceFunction
如下所示:

public string ReplaceFunction(Match m)
{
  // do stuff with m.Groups(1);
  return result.ToString();
}

如果需要,我可以扩展正则表达式以更具体地匹配。当前所有ID值(仅包含数字)都将被替换。您还可以在match evaluator函数中构建一点“额外智能”,如果您不想更改它,则使其返回匹配项不变。

在类中查看此属性

谢谢!工作起来很有魅力。唯一的小错误是正则表达式字符串中缺少一个“\”(\d+)\”。。。应为“ID=\”(\\d+)“”