与标记

时间:2017-07-10 18:08:45

标签: regex xml

我需要一个匹配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(.*?)>

1 个答案:

答案 0 :(得分:1)

如果单词Task可以在标记内多次出现,您可以使用lookbehind

(?<=<t[12]:ExecuteTask[^><]+)\bTask

See demo at regexstorm

lookbehind是一个零宽度断言,如果它前面有一个或多个不是Task>的字符,它会在<后面的单词前面看,前面是<t[12]:ExecuteTask

如果您希望单词在内部出现一次,则使用capturing group

效率更高
(<t[12]:ExecuteTask[^><]+?)\bTask

并替换为$1TaskID(其中$1与第一组捕获的内容相匹配)。

See another demo at regexstorm