我正试图在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";
经过测试,这些是我提出的最接近此类工作的正则表达式。
- (<w:t[^>]*>((.*(\bdes\b(.*
- (?<=(<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