2017-07-10 182 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! –