如何在xml标记之间替换word/s



我正试图在C#中使用regex来搜索单词文档xml文件中的特定单词(在下面的示例中搜索"des"(,以便用所需单词替换。

<w:r>
<w:t>Some example des test desmond end of sentence</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve">Some test sentence des and desmond end of testing</w:t>
</w:r>

我需要正则表达式只查找起始标记之间的单词=>quot<w: t>quot;或"<w: txml:space="保存">quot;并且结束标签=>quot<w: t>

在区分";des";以及";desmond";

经过测试,这些是我提出的最接近此类工作的正则表达式。

  1. (<w:t[^>]*>((.*(\bdes\b(.*
  2. (?<=(<w:t[^>]*>(((.*(\bdes\b(.*

第一个似乎搜索整个标签<w: t>等等等等<w: t>并将整个搜索组替换为一个替换词,而第二个搜索组则抛出一个错误,称look-behind不能是非固定宽度。

什么正则表达式可以仅在"<w: t>quot;标签?

(<w:t[^>]* >)(.* )bdesb(.* )(</w:t>)

我认为您可以对要替换的单词使用捕获组。你可以试试下面的正则表达式。

(<w:t[^>]*>.*?)b(des)b(.*?</w:t>)

演示

我还试着在C#上测试。

string item = "<w:r>"
+"    <w:t>Some example des test desmond end of sentence</w:t>"
+"</w:r>"
+"<w:r>"
+"    <w:t xml:space="preserve">Some test sentence des and desmond end of testing</w:t>"
+"</w:r>";
Console.WriteLine(item);

string result = System.Text.RegularExpressions.Regex.Replace(item,@"(<w:t[^>]*>.*?)b(des)b(.*?</w:t>)", "$1new value$3");
Console.WriteLine(result);

https://dotnetfiddle.net/W0I1Um

最新更新