【问题标题】:Replace part of XML by using regex capture group使用正则表达式捕获组替换部分 XML
【发布时间】:2014-05-06 01:31:09
【问题描述】:

我想捕获 XML 字符串的一部分并将捕获的值替换为新值。

我有以下代码:

Regex regex = new Regex("<ns1:AcctId>(?<AcctId>.*?)</ns1:AcctId>");
Match match = regex.Match(Xml);

string AcctId = match.Groups["AcctId"].Value;

string IBANizedAcctId = IBANHelper.ConvertBBANToIBAN(AcctId);

newXml = Regex.Replace(oldXml, regex, IBANizedAcctId); //DOES NOT WORK!

所以我想在ns1:AcctId XML 元素中捕获 AcctId。然后我想通过将 BBAN 转换为 IBAN 并替换值来用新值替换这个值。第一部分有效,但我不知道如何完成最后一部分(我确实找到了一个想法here,但我不明白)。

希望有人能帮帮我!

【问题讨论】:

  • 好的...由于某种原因它不允许我发布我的答案... :(
  • 这是我对现有代码所做的 2 处更改: Match match = regex.Match(oldXml); -and- string newXml = oldXml.Replace(AcctId, IBANizedAcctId);
  • 也无法回答:但感谢this,我找到了这个解决方案 回答:我知道最后一部分应该是:Xml = Regex.Replace(Xml, regexString, string.Format("$1{0}$3", IBANizedAcctId)); 其中 regexString 具有三个捕获组:string regexDestAcctIntString = "(&lt;ns1:AcctId&gt;)(?&lt;AcctId&gt;.*?)(&lt;/ns1:AcctId&gt;)"; @ 987654327@ 和$3 分别指第一个和第三个捕获组,并将中间替换为新值。 80% 确定它有效。
  • @MaxOvrdrv 这更合乎逻辑。 :)
  • 试一试...我的也可以 100% 工作,并且可以跨越整个 Xml 字符串。不仅仅是比赛。由你决定;)

标签: c# regex


【解决方案1】:
Regex regex = new Regex("<ns1:AcctId>(?<AcctId>.*?)</ns1:AcctId>");
Match match = regex.Match(oldXml);

string AcctId = match.Groups["AcctId"].Value;

string IBANizedAcctId = IBANHelper.ConvertBBANToIBAN(AcctId);

newXml = oldXml.Replace(AcctId, IBANizedAcctId); //should work...

【讨论】:

  • 我想捕获所有出现的&lt;ns1:AcctId&gt; *** &lt;/ns1:AcctId&gt;,它们可以包含不同的数字。
  • 我接受了答案,因为它确实有效!但是我现在的要求有点不同。我为那个here提出了一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2010-11-19
  • 2020-12-28
  • 2015-08-06
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多