我需要一个匹配XML
标签内特定单词的正则表达式<t1:ExecuteTask DisplayName="Normes" Task="932en283" sap:VirtualizedContainerService.HintSize="200,22" Parameter="Normes tares" Value="[NormeTare]">
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</t1:ExecuteTask>
...
<t1:ReadProductParameterValue DisplayName="Normes volumes" sap:VirtualizedContainerService.HintSize="200,22" Parameter="Normes volumes" Value="[NormeVol]">
</t1:ReadProductParameterValue>
在这里,我正在寻找匹配任务的正则表达式,但只在标签内部,所以我可以用另一个单词替换它。
这是我到目前为止所做的正则表达式<t[1-2]:ExecuteTask(.*?)>
答案 0 :(得分:1)
如果单词Task
可以在标记内多次出现,您可以使用lookbehind:
(?<=<t[12]:ExecuteTask[^><]+)\bTask
[^><]+
negated class匹配一个或多个字符,而不是>
,<
留在里面。\b
与word boundary匹配。 lookbehind是一个零宽度断言,如果它前面有一个或多个不是Task
或>
的字符,它会在<
后面的单词前面看,前面是<t[12]:ExecuteTask
。
如果您希望单词在内部出现一次,则使用capturing group
效率更高(<t[12]:ExecuteTask[^><]+?)\bTask
并替换为$1TaskID
(其中$1
与第一组捕获的内容相匹配)。