为什么我的正则表达式不会折叠换行组?

时间:2009-06-08 15:22:13

标签: regex perl newline

我有以下正则表达式尝试减少换行符组:

s/(\n|\r\n|\n\r)(\n|\r\n|\n\r)(\n|\r\n|\n\r)+/\n\n/gmi;

最初是:

s/\n\n(\n)+/\n\n/gmi

我希望减少连续最多连续两行的换行数(只是尝试对我为内部wiki导入的一些文件进行一些清理)。 数据中有几行CRLF(Windows数据文件)。 然而,它似乎没有用。

我做错了什么?这是一个出错的例子:

以:

开始
added missing options for Menu and toolbar positioning</p>

</div>

</body>

</html>

我正在剥离HTML代码,因此它最终会像这样:

added missing options for Menu and toolbar positioning





然后我应用正则表达式,它出现为:

added missing options for Menu and toolbar positioning



3 个答案:

答案 0 :(得分:6)

还尝试匹配这些新行周围留下的任何其他空格:

s/(\r?\n[ \t]*){2,}/\n\n/g;

答案 1 :(得分:1)

由于您似乎无法应用给出的答案,或许您可以向我们展示您的一些实际数据,

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper $slurped_file;

您可能还想尝试删除任何\ r \ n字符,然后删除原始换行符。

答案 2 :(得分:0)

您是否尝试过匹配这样的多个群组?

(\r\n){2,}/\n\n