Find 记事本++;正则表达式中的换行符

Find 记事本++;正则表达式中的换行符,find,notepad++,multilinestring,Find,Notepad++,Multilinestring,假设您有以下文件: x a b c x x a b c x x 您需要使用记事本++查找序列abc(并选择整3行)。如何用正则表达式来表达换行符呢?Notepad++可以轻松地做到这一点,您甚至不需要正则表达式 在“查找”对话框中,查看左下角并将搜索模式切换到“扩展”模式,该模式允许\n等 如果您正在处理windows格式的文件,您将查找\r\n(回车符,换行符) 将在三行上找到模式2012年6月18日更新 使用new,您确实可以搜索带有正则表达式的换行符。所以你可以用 a\r\nb\r\nc

假设您有以下文件:

x
a
b
c
x
x
a
b
c
x
x

您需要使用记事本++查找序列abc(并选择整3行)。如何用正则表达式来表达换行符呢?

Notepad++可以轻松地做到这一点,您甚至不需要正则表达式

在“查找”对话框中,查看左下角并将搜索模式切换到“扩展”模式,该模式允许\n等

如果您正在处理windows格式的文件,您将查找\r\n(回车符,换行符)


将在三行上找到模式

2012年6月18日更新

使用new,您确实可以搜索带有正则表达式的换行符。所以你可以用

a\r\nb\r\nc
即使使用正则表达式也可以实现您想要的功能。注意
\r\n
是换行符的Windows编码。在Unix文件中,它只是
\n

不幸的是,在使用正则表达式搜索时,在记事本++中无法做到这一点。Notepad++基于闪烁编辑器组件,该组件不处理正则表达式中的换行符

您可以使用扩展搜索进行换行搜索,但我认为这无助于您搜索3行

更多信息

更新:Robb和StartCass0830关于扩展搜索的观点是正确的。它确实有效,但在使用正则表达式搜索时无效

^a\x0D\x0Ab\x0D\x0Ac

这将起作用\x0D是换行符,\x0A是回车符。假设文件中的每一行都以ascii 10和13结尾。

a\r\nb\r\nc
对我有效,但不是
^a\x0D\x0Ab\x0D\x0Ac


嗯,太遗憾了,newline没有使用正则表达式。现在我必须再次回到Textpad(

我找到了解决方法。 简单地说,在扩展模式下,将所有
\r\n
替换为文档其余部分中不存在的字符串,例如
、、换行符、、
(注意特殊的regexp字符,如
$
&
*
)。 然后切换到Regexp模式,进行一些替换(现在换行符是
,,,换行符,,,
)。
接下来,再次切换到扩展模式,并在记事本++中将所有
,,,,,
替换为
\r\n

。您还可以尝试高亮显示所需的文本部分,然后按CTRL+J


这将使文本对齐,从而删除所有行尾。

选择搜索模式 扩展(\n\r\t\0\x…)

\n是新线之类的

对于记事本6及更高版本,请将其作为正则表达式执行:

  • 选择搜索模式>正则表达式(不匹配换行符)
  • 在“查找内容”文本框中:
    a[\r\n]b[\r\n]+c[\r\n]
或者,如果您查看(Windows或Unix)文件时看到其换行符为
\r\n
\n
,则您可能会发现使用扩展模式更容易:

  • 选择搜索模式>扩展(\n\r\t\0\x…)
  • 在Windows的“查找内容”文本框中:
    a\r\nb\r\nc\r\n
  • 或者在Unix的“查找内容”文本框中:
    a\nb\nc\n
不清楚OP的目的是否也是为了选择尾随行返回(在“c”之后),这也是删除行所必需的

要不选择尾随行返回,只要从匹配语句中删除最后一行返回,就可以将其替换为非空字符串


请注意,如果字符串的最后一行有匹配项,但没有匹配的尾行返回,则匹配将失败。

oh..我尝试了一个\nb\nc..忘记了回车符。谢谢!有时需要使用正则表达式搜索换行符(如果您想进行更复杂的搜索,包括换行符)。不可能像下一个回答中详细说明的那样,我尝试使用“正则表达式”(而不是“扩展”)在记事本++5.9.3中使用换行符,但徒劳!但在记事本++6.0中运行良好-请参见下面darioo的答案。我认为这是不对的,是针对正则表达式而不是扩展模式提出的问题。在正则表达式中可能存在这样的情况\x0D是换行符,\x0A是回车符请参见答案我认为这个答案是错误的。请参见Robb的答案和我的答案,以验证这个答案是否错误。@StartClass0830:我试过你了rs和Robb的答案,我无法使多行匹配工作。编辑:是的,在使用扩展搜索时它确实工作。但在使用正则表达式时它不工作。您是对的。假设行以\r\n结尾。可能在您的环境中,文件的行仅以\n结尾(没有\r).无论如何..还有什么比Notepad++更好的完全支持正则表达式的吗?@PaN1C_showt1; me:嗯,总是有Vim和Emacs。我使用了这两种方法,它们都非常强大的正则表达式支持。但是学习曲线总是让人感到不快。我建议你访问、下载Vim并在尝试认真使用它之前阅读教程。我补充^这是我一直使用的。我不知道为什么这个解决方案没有升级。它在v6之前绝对有效。这在一个小文档上很好。在一个非常大的文件上尝试过(>1M行)。Notepad++完全挂起(可能是因为内存太少)。此方法的问题是:在替换所有新行字符时,整个文档都会在一行中结束。处理大型文档的一个潜在修改是关闭文档,并使用Kuchara的实用解决方法,使用目录和文件名过滤器替换文件,该过滤器只会修改预期文件。因此,在单行上进行转换时,无需在闪烁编辑器中打开文件。这与问题有何关系?请确保打开
匹配换行符
选项,正如@aljipa中所述,在特定位置需要换行符时,该选项是不必要的。
^a\x0D\x0Ab\x0D\x0Ac