2017-04-19 28 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