2017-07-10 142 views
2

我需要一个特定的词匹配中的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

不,你需要的是一个解析器和一个更具描述性的问题(工具?语言你正在使用?) – Jan

+0

我使用VB.NET我试图精确匹配只有两个字任务所以我可以用TaskID替换它: Dim result As String = Regex.Replace(MyText,“”,“TaskID”) –

+0

您可以简单地要做的是:Dim result As String = Regex.Replace(MyText,“Task =”,“TaskID =”)这不能保证它在标签中,但是如果你尝试在标签内做东西,你可能会遇到嵌套标签。 – sniperd

回答

1

如果单词Task可以出现在标签内多次,您可以使用lookbehind正则表达式:

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

See demo at regexstorm

的回顾后是一个零宽度断言它看起来正确的字Task背后如果它是由不在><一个或多个字符开头之前,由<t[12]:ExecuteTask之前。


如果您预计这个词来occure只有一次里面,它是更有效地使用一个capturing group

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

$1TaskID取代(其中$1匹配什么是由第一组捕获)。

See another demo at regexstorm

+0

这更清楚了,谢谢! –

+0

不客气@HamzaNaciri! –