我有一个包含许多表达式的文本,例如:< .....>,例如:
< ..> Text1< .sdfdsvd>文字2< .... dgdfg> Text3< ... something>文本4
如何立即消除所有括号< ...>以及这些括号之间的所有命令/文本?但是不应该触及它们之间的其他“真实”文本(如上面的text1,text2)。
我尝试使用正则表达式:
&LT。* GT;
但是这也发现了这样的一个块,包括inbetween文本:
< ..> Text1< .sdfdsvd>
我的第二次尝试是搜索等式表达式<。>在这两者之间没有第三个括号,所以我试过了:
< * [^> ^<]>
但这也不起作用,行为没有变化。如何正确构建所需的表达式?
答案 0 :(得分:1)
这似乎有效:
<[^\s]*>
它查找左括号,然后是括号之间没有空格的任何内容,然后是右括号。但是,如果括号(<text1 text2>
)之间有空格,则需要进行一些调整,此时,对您的某个尝试的修改会更好:
<[^<^>]*>
这个查找左括号,然后是左括号或右括号,然后是右括号。
答案 1 :(得分:1)
这适用于Notepad ++:
找到:<[^>]+?>
替换为: nothing
尝试一下:http://regex101.com/r/lC9mD4
您的尝试存在一些问题:<.*[^>^<]>
.*
匹配通过最终可能匹配的所有字符。这意味着将绕过除最后一个之外的所有标签。这称为greedy。在我的解决方案中,我已将其更改为占有,这可以达到第一个可能的匹配:.*?
...虽然我将此应用于字符类本身:[^>]+?
[^>^<]
因两个原因不正确,一个小,一个大。原因很简单,第一个插入符^
表示&#34;与以下任何字符都不匹配&#34;,其后面的字符为>
,^
和{ {1}}。所以你说你不想匹配插入符号,这是不正确的(但不是有害的)。更大的问题是,当它需要一个或多个时,它会尝试匹配一个字符,这由加号表示:<
。否则,您的尝试与我的解决方案相差不远。
答案 2 :(得分:1)
试试<.*?>
。如果您不使用“?”,正则表达式将尝试查找匹配的最长字符串。使用“*?”将强制找到最短的。