2016-03-25 23 views
1

以下のoptioncode 09ですべてのノードを見つけてそのノードを削除するには、notepad ++で何を検索するか教えてください。たとえば、私は以下のXMLを検索して最初のエントリを削除し、そのままにしておきたいと思っています。notepad ++ xml node regex検索と置換

空白の値を置き換えるために働く<Vehicle>.*?</Vehicle>を検索しようとしましたが、ノード全体の09値を検索する基準も追加したいと考えています。 "> 09 <"の文字列値の検索条件を追加することはできますか?ここ

検索:

<Vehicle> 
    <InvoiceDateTime>2016-03-20T00:00:00</InvoiceDateTime> 
    <InvoiceChargeCents>63</InvoiceChargeCents> 
    <OptionCode>09</OptionCode> 
    <JobEndDateTime>2016-03-19T00:00:00</JobEndDateTime> 
    <AuthorizationCode /> 
    </Vehicle> 
    <Vehicle> 
    <InvoiceDateTime>2016-03-20T00:00:00</InvoiceDateTime> 
    <InvoiceChargeCents>63</InvoiceChargeCents> 
    <OptionCode>35</OptionCode> 
    <JobEndDateTime>2016-03-19T00:00:00</JobEndDateTime> 
    <AuthorizationCode /> 
    </Vehicle> 

戻り、以下のエントリ:

<Vehicle> 
    <InvoiceDateTime>2016-03-20T00:00:00</InvoiceDateTime> 
    <InvoiceChargeCents>63</InvoiceChargeCents> 
    <OptionCode>35</OptionCode> 
    <JobEndDateTime>2016-03-19T00:00:00</JobEndDateTime> 
    <AuthorizationCode /> 
    </Vehicle> 

答えて

0

私のアプローチは、それはどちらもオープンでもクローズと一致することができるように、ドットマッチングを制限し、その後<Vehicle>オープニングノードのマッチングで構成されており、ノードがtempered greedy tokenVehicle

<Vehicle>(?:(?!</?Vehicle>).)*>09<.*?</Vehicle>\R* 

.と一致する改行は、が有効になっている必要があります。

regex demoを参照してください。空の文字列に置き換えてください。

(?:(?!</?Vehicle>).)*は、最初の>09<までの任意のテキストと、最も近い<Vehicle>の開始ノードの後に​​一致する、威力のある貪欲なトークンです。

enter image description here

\R*マッチゼロ以上の改行シーケンス(CRLF、又はCRまたはLFのいずれか)こと。

また、より効率的なパターンは、上記のパターンの展開されたバージョンになりますのでご了承ください。

<Vehicle>[^<]*(?:<(?!\/?Vehicle>)[^<]*)*>09<.*?<\/Vehicle>\R* 
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

another regex demo

を参照してください。これは、同じテキストにマッチしますが、大規模なテキストと、より効率的です。

+1

恐らく、> 09 <を上回らないブロックが複数ある場合でも、これは完璧に動作します。ご協力ありがとうございます! – TPG

+1

回答ありがとう! – TPG