2017-04-19 48 views
1

後,我有成千上萬個條目,就像一個文件:在記事本中使用正則表達式++,如何捕捉前行相匹配的表達

<Source foo="goo"> 
    <Name label="SomeLabel"/> 
</Source> 
<Target foo="bar"> 
    <Name label="SomeLabel"/> 
</Target> 

改變是「SomeLabel」字符串的唯一的事情。我試圖在Notepad ++中編寫一個搜索表達式,它將只返回'SomeLabel'字符串,或者至少返回整行。不過,我只有想要那一行,如果它是<目標>標籤;我不想要<來源>節點。我知道我需要使用lookbehead(或lookahead),但我無法弄清楚,尤其是與字符串中的< >字符匹配。

謝謝!

+0

你可以用'notepad ++'來做到這一點,但我可以用** Perl **給你簡單的方法,如果可以使用的話 –

+1

@ k-five:當然,你可以在'notepad ++'中做到這一點。 – Jan

回答

0

> <>並不是真正的問題。在這些限制,您可以輕鬆抓取只是你想

[^"]+(?="\/>[^<]*<\/Target) 
+0

雖然這將返回源標記之間的名稱節點。我只想要位於Target標籤之間的Name節點。謝謝。 – elora

+0

@elora對不起,修正目標爲 – Tezra

0

您可以使用下面的表達式

<Target[^>]*>    # match <Target...> 
(?:(?!</Target>)[\s\S])*? # match anything afterwards, 
          # make sure not to overrun </Target> 
label="SomeLabel"   # match label="SomeLabel" 
(?:(?!</Target>)[\s\S])*? # same as above 
</Target>     # closing Tag 

在這裏,只有label="SomeLabel"的條目被選擇的標記,使用詳細模式並參見a demo on regex101.com

+0

積極的前瞻感謝。我可以得到這主要工作在regex101.com(它仍然返回,而不僅僅是標籤),但我還沒有設法讓它在記事本++的工作。我會繼續擺弄。 – elora