2

我有一个巨大的文本文件,想要删除所有长度小于 6 个字符的行。

我尝试了以下搜索字符串(正则表达式 - Perl)

^.{0,5}\n\r$   -- string not found

^.{0,5}\n\r    -- string not found

^.{0,5}$       -- leaves blank lines

^.{0,5}$\n\r   -- string not found

^.{0,5}$\r     -- leaves blank lines

^.{0,5}$\r\n   -- **worked**

我的问题是为什么最后一个工作而第四个不能工作?为什么第五个要留空行。

谢谢。

4

2 回答 2

1

因为 ^.{0,5}$\n\r不一样^.{0,5}$\r\n

  • \n\r是一个换行符,后跟回车符。

  • \r\n 是一个回车,后跟换行 - 一种流行的行尾字符组合。专门\r\n用于 MS-DOS 和 Windows 系列操作系统等。

于 2014-11-20T20:57:37.663 回答
1

在多行模式下,^是一个匹配字符串开头的元字符,也可以在换行符之后匹配。

同样,$匹配字符串结尾和这些:

          \r\n
         ^    ^
here ----+-or-+

或者

            \n
         ^    ^
here ----+-or-+  

$如果可以的话,将尝试在换行符之前匹配(取决于正则表达式的其他部分)。

您可以使用它来利用这个正则表达式

^.{0,5}$(\r?\n)*这将匹配字符串结尾可选的连续换行符。

于 2014-11-20T21:38:06.433 回答