NP ++:正则表达式

时间:2014-03-25 13:13:07

标签: expression notepad++

我有一个包含许多表达式的文本,例如:< .....>,例如:

  

< ..> Text1< .sdfdsvd>文字2< .... dgdfg> Text3< ... something>文本4

如何立即消除所有括号< ...>以及这些括号之间的所有命令/文本?但是不应该触及它们之间的其他“真实”文本(如上面的text1,text2)。

我尝试使用正则表达式:

  

&LT。* GT;

但是这也发现了这样的一个块,包括inbetween文本:

  

< ..> Text1< .sdfdsvd>

我的第二次尝试是搜索等式表达式<。>在这两者之间没有第三个括号,所以我试过了:

  

< * [^> ^<]>

但这也不起作用,行为没有变化。如何正确构建所需的表达式?

3 个答案:

答案 0 :(得分:1)

这似乎有效:

<[^\s]*>

它查找左括号,然后是括号之间没有空格的任何内容,然后是右括号。但是,如果括号(<text1 text2>)之间有空格,则需要进行一些调整,此时,对您的某个尝试的修改会更好:

<[^<^>]*>

这个查找左括号,然后是左括号或右括号,然后是右括号。

答案 1 :(得分:1)

这适用于Notepad ++:

找到:<[^>]+?>

替换为: nothing

尝试一下:http://regex101.com/r/lC9mD4

您的尝试存在一些问题:<.*[^>^<]>

  • .*匹配通过最终可能匹配的所有字符。这意味着将绕过除最后一个之外的所有标签。这称为greedy。在我的解决方案中,我已将其更改为占有,这可以达到第一个可能的匹配:.*? ...虽然我将此应用于字符类本身:[^>]+?
  • [^>^<]因两个原因不正确,一个小,一个大。原因很简单,第一个插入符^表示&#34;与以下任何字符都不匹配&#34;,其后面的字符为>^和{ {1}}。所以你说你不想匹配插入符号,这是不正确的(但不是有害的)。更大的问题是,当它需要一个或多个时,它会尝试匹配一个字符,这由加号表示:<

否则,您的尝试与我的解决方案相差不远。

答案 2 :(得分:1)

试试<.*?>。如果您不使用“?”,正则表达式将尝试查找匹配的最长字符串。使用“*?”将强制找到最短的