Notepad++ 多行正则表达式

22

我有数百个此类文件的链接:http://pastebin.com/fGgLfZf8

但我想删除所有占据超过一行的注释。

<!--- MPU ---> 

应该保持不变,而

<!--
************
blablabla
************
-->

应该被移除。

我知道Notepad++使用正则表达式查找多个文档的功能,但我正在尝试使用它,但是我遇到了一些困难。 首先,我正在尝试这个正则表达式:

<\!\-\-(.*?)\-\->

在这里测试的正则表达式:http://www.regextester.com/ 至少部分有效(因为它可以突出显示仅占一行的注释)。 但如果我将这个正则表达式复制并粘贴到Notepad++上,它只会匹配单行注释 =\

有人知道如何在Notepad++中实现这个吗?

5个回答

46
在“搜索模式”中,“正则表达式”选项旁边有一个“匹配换行符”复选框(根据@glatapoui的说法,需要注意的是这仅适用于Notepad++ v6,而不适用于先前版本)。

enter image description here

哇,写<\!\-\-(.*?)\-\->并选择那个似乎真的起作用了!谢谢。现在我只需要找出如何排除单行的。 - Andrea Silvestri

4

这个表达式 <!--.+?(?<=[\*\r\n])--> 只在Notepad++中匹配多行注释。


1
另一种捕获多行文本的方法是使用表达式:
<!---([\S\s]+?)--->

\S+ 匹配所有非空格符号,
\s+ 匹配所有空格符号(包括 \r \n \t)。

它适用于notepad++,也可能适用于其他编辑器...

编辑: 一开始我没有注意到问题是捕获并删除多行注释而不包括单行注释。 我找到了两次迭代的方法。 首先,我们需要找到并替换为空的文本

<!-(?:(?!.*->)[\s\S]+?—->|)

这将捕获所有多行注释和单行注释前缀。 然后我们需要恢复我们失去的单行注释前缀:

Find:
(.+—->)

Replace:
<!—-\1

它将修复单行注释。如果“—->”组合出现在XML代码中,则无法结束注释。

这也将匹配没有换行符的行。 - Toto
@Toto,我第一次没有注意到。现在我提出另一种两个替换的方法。 - Igor Aleksandrov

0

如果只是单个文档,一个简单的技巧是将行尾转换为Unix。

菜单:[编辑] -> [EOL转换] -> [Unix]

然后在表达式中使用简单的\n来检测换行符。

这样,您就不必更改从某些在线正则表达式构建器构建/复制的表达式。

注意:别忘了在必要时切换回Windows的行尾。


这个回答如何回答这个问题呢? - Toto
我知道这个问题是关于一次性处理“多个”文档,我的提示对这种特定情况没有帮助。但我认为它可以帮助其他人,因为他们需要找到如何在NP++中处理多行搜索,而不需要更改依赖于\n的预构建搜索表达式或将“.”设置为包括搜索对话框中的换行符。 - Assem

0

<!--[*a-zA-Z\r\n]*-->

这个似乎只能在Notepad++中使用多行注释。

编辑: 小错误:这个表达式中空格会有问题。 你可以尝试使用 <!--[\r\n]{1}[* a-zA-Z\r\n]*-->


他们都对我不起作用 =\ 他们在你的Notepad++中工作吗? - Andrea Silvestri
是的,它们与我一起在Notepad++和Regextester中工作。您能在注释的第一个换行符之前加上一些空格吗? - anthonyme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接