在Notepad++中查找CRLF

338

如何在Notepad++中查找/替换所有CR/LF字符?

我想要相当于Microsoft Word中的^p特殊字符的东西。


仅仅是为了在“thenonhacker”提到的基础上增加一些内容。 我们在工作中使用UltraEdit-32,处理EDI文件(x.12),我们经常需要包装或解除数据。 最常用的两个搜索和替换字符串是“^p”和“~”。 走一条路将用CR / LF替换“〜”,以便更轻松地阅读每个段落。 反过来将文件放回EDI转换器所需的格式。 对于像我这样懒惰的人来说,我只是将它们映射到键上,以便更容易使用。 - DavidGrove
1
虽然不相关,但很有帮助。我在搜索如何在Windows中将UNIX文本文件转换为Windows格式的方法后访问了这个页面。这是我所做的并且有效的方法:按下 CTRL+H,选择“搜索模式:正则表达式”。将“查找内容”设置为“$”,将“替换为”设置为“\r”。将内容复制粘贴到记事本中或保存到磁盘中。 - Guru
3
太棒了!Notepad++6.0现在支持PCRE:像 [\r\n]+ 这样的正则表达式现在可以使用了。我已经更新了我的答案,而且会庆祝一下! - VonC
@VonC:我猜我需要更新所有我的[notepad++]答案 :) - BoltClock
1
似乎还没有人提到转义序列 \R,它可以匹配通用换行符;也就是说,任何被视为换行序列的东西...。 - bobble bubble
只是提供信息,无需搜索和替换。至少在Notepad++ 7.3.3版本中,您可以右键单击打开的Notepad++窗口底部栏中的“Windows(CR LF)”或“Unix(LF)”,并在两者之间切换。可以使用菜单栏中的“显示所有字符”按钮确认成功。 - Caseyy
19个回答

432

[\r\n]+也应该有效。

更新于2012年3月26日,Notepad++ 6.0发布日期:

天啊,它现在竟然能用了!!!

PCRE regexp in Notepad++


原始答案2008(Notepad ++ 4.x)-2009-2010-2011(Notepad ++ 5.x)

实际上,不是的,似乎它不能使用正则表达式...

但是,如果您有Notepad ++ 5.x,则可以使用“扩展”搜索模式,并查找\r\n。这确实找到了所有的CRLF

(我意识到这与其他人给出的答案相同,但再次强调,“扩展模式”仅适用于Notepad ++ 4.9、5.x及更高版本)


自2009年4月以来,Notepad++网站上有一篇关于这个主题的维基文章:
"如何替换行尾,从而改变行布局".
(由georgiecasey在他/她的下面的回答中提到)

一些相关的摘录包括以下搜索过程:

简单搜索 (Ctrl+F),搜索模式 = Normal

您可以在编辑窗口中选择一个EOL

  • 只需将光标移动到行末,然后键入Shift+Right箭头。
  • 或者,使用鼠标选择EOL,从行末开始拖动到下一行的开头;向EOL右侧拖动不起作用。 您可以手动复制EOL并将其粘贴到仅包含Unix文件(LF-only)的字段中。

简单搜索 (Ctrl+F),搜索模式 = 扩展

"扩展"选项显示\n\r作为可能匹配的字符。
与普通搜索模式一样,Notepad++正在寻找确切的字符。
在UNIX格式文件中搜索\r将找不到任何内容,但搜索\n将会。同样,Macintosh格式文件将包含\r但不包含\n

简单搜索 (Ctrl+F),搜索模式 = 正则表达式

正则表达式使用字符^$将匹配字符串锚定到行的开头或结尾。例如,搜索return;$将找到出现在同一行上没有后续文本的"return;"。锚定字符在所有文件格式中的工作方式相同。
'.'点元字符不匹配行结束符。

[在Notepad++ 5.8.5中测试]: 使用显式的\r\n进行正则表达式搜索不起作用(与Scintilla文档相反)
同样,在选择EOL时放置在字段中的(不可见)EOL字符也不能搜索。 高级搜索(Ctrl+R)不使用正则表达式

Ctrl+M将插入与换行符匹配的内容。它们将被替换为替换字符串。
我建议这种方法是最可靠的,除非您真的需要使用正则表达式。
例如,在双倍间隔的文件中删除每个第二个换行符,输入Ctrl+M两次到搜索字符串框中,并在替换字符串框中输入一次。

高级搜索(Ctrl+R)使用正则表达式。

无法匹配Ctrl+M$\r\n


同一维基百科还提到了Hex编辑器替代方案

  • 在文档开头输入新字符串。
  • 然后选择以Hex模式查看文档
  • 选择其中一行并按下Ctrl+H
  • 当您打开替换对话框时,选择新替换字符串的背景,并使用Ctrl+C将其复制粘贴到“替换为”输入框中。
  • 然后根据需要进行替换或全部替换。

注意:通常用于新行的字符显示为0a
如果文件处于Windows格式,则可能具有不同的值。在这种情况下,您可以随时转到编辑 -> EOL转换 -> 转换为Unix格式,并在替换后切换回来和编辑 -> EOL转换 -> 转换为Windows格式


1
我之前在跑4.7版本。升级到最新版后,扩展模式可以按照广告所说的正常运作。感谢所有回复的人。 - polara
它可行了!但这使得Notepad ++ RegExp非常糟糕。UltraEdit-32更智能,你只需要\n,你就完成了你的工作... - user46915
对我来说,Ctrl M 似乎没什么作用。在 ) 和 $ 之间使用 Ctrl M 搜索 (\d+)$。将其替换为 '\1,',但换行符号没有被替换,其他的都被替换了。版本是 5.9.2。 - jcollum
就此而言,Windows 的换行格式是 CR LF,十六进制为 0D 0A(列表中的十六进制为 0A,只有 LF,与 Unix 兼容)。 - Matt Lyons-Wood
2
@GarretWilson 我确认 [^\r]\n 可以正常工作(正则表达式搜索):http://i.stack.imgur.com/PxZWD.png - VonC
显示剩余4条评论

23

看起来这是一个常见问题解答,提供的解决方案如下:

不使用正则表达式的简单搜索(Ctrl+H)

您可以打开“视图/显示行尾”或“视图/显示全部”,并选择当前可见的换行符。然后,在开始命令时,与换行符匹配的一些字符将被粘贴到搜索字段中。与正则表达式模式不同,匹配项将被替换为替换字符串。

注意1:如果用鼠标选择它们,请从它们之前的位置开始拖动到下一行的开头。拖到行末是不行的。

注意2:您不能将它们自己复制并粘贴到字段中。

不使用正则表达式的高级搜索(Ctrl+R)

Ctrl+M将插入与换行符匹配的内容。它们将被替换为替换字符串。


2
您也可以使用Ctrl+M在替换字符串中插入新行。 - Dusty Campbell
2
这是一个常见问题,因为这是一个设计上的小瑕疵,在一个非常出色的产品中。 - Warren P

11

在替换对话框中,您需要将搜索模式设置为“扩展”。普通或正则表达式模式不起作用。

然后只需查找“\r\n”(对于Unix文件只需使用“\n”,对于Mac格式文件只需使用“\r”),并将替换设置为您想要的任何内容。


这个答案在编写时已经过时了 - 自2001年以来,Mac就不再使用\r了...(现在是Unix)。 - Jasper

9

我在查找/替换窗口中使用正则表达式并没有什么好运气。

但是,在Notepad++ v4.1.2中,以下方法可行:

  1. 使用“视图|显示行尾”菜单启用行尾字符的显示。 (回车换行应显示为单个阴影CRLF '字符'。)

  2. 选择其中一个CRLF '字符'(将光标放在其前面,按住SHIFT键,然后按一次右箭头键)。

  3. 将CRLF字符复制到剪贴板。

  4. 确保您没有打开查找或查找/替换对话框。

  5. 打开查找/替换对话框。 “查找内容”字段显示剪贴板的内容:在本例中是CRLF字符-它显示为2个“盒子字符”(可能是不可打印的字符?)

  6. 确保“正则表达式”选项处于关闭状态。

现在,您应该能够根据需要计数、查找或替换。


6

带有CRLF的图像

在此输入图片描述


不带CRLF的图像

在此输入图片描述


别名菜单 编辑显示符号显示行尾. - Peter Mortensen

4
在2013年的v6.13或更高版本中,使用以下方法:

菜单编辑EOL 转换Windows 格式

这并不涵盖将CRLF替换为一个或多个任意字符的一般情况。或者用CRLF替换一个或多个任意字符(例如用CRLF替换空格字符)。 - Peter Mortensen

4
我发现使用Replace函数并使用“\n”与“扩展”模式一起使用可以实现此目的。我正在使用版本5.8.5。

1
这个页面上很少有几项是有效的。使用notepad++ 5.8.6。真的很难相信这么简单的东西需要如此复杂且常常不起作用的答案。 - Andrew S

3

要查找任何类型的换行符序列,请使用以下正则表达式构造:

\R

要查找并选择连续的换行符序列,请在\R后面添加+\R+
确保打开正则表达式模式:

enter image description here

它匹配:

  • U+000DU+000A -CRLF`序列
  • U+000A - 换行符LF
  • U+000B - 垂直制表符VT
  • U+000C - 换页符FF
  • U+000D - 回车符CR
  • U+0085 - 下一行NEL
  • U+2028 - 行分隔符
  • U+2029 - 段落分隔符

2
假设它有“正则表达式”搜索功能,请查找\r\n。我更喜欢\r?\n,因为某些文件不使用回车符。 编辑:感谢反馈,无论是谁投了反对票。我学到了什么......好吧,什么也没学到,因为你没有提供任何反馈。这个有什么问题吗?

1
我不确定为什么它不起作用,但它确实没有。我猜想这个正则表达式实现(在Notepad++中)只检查单行,并忽略任何换行符。这可能就是为什么你被投票否决的原因。 - frank hadder
1
没错。在Notepad++中,正则表达式是逐行匹配的,因此您可以使用$在行尾进行位置匹配,但无法搜索/替换跨越多行的表达式。 - Warren P

2
使用高级搜索选项(Ctrl + R),使用回车符键盘快捷键(Ctrl + M)插入回车符号。

当我尝试使用Ctrl + R时,它对我没有起作用。它在文档中插入了一个奇怪的控制字符"DC2"。Notepad++版本:7.5.6(2018-05-19)。 - Peter Mortensen

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