2009-06-08 49 views
1

我有以下的正则表达式,以尽量减少换行的组:为什么我的正则表达式不会折叠新行的组?

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 

我期待,以减少连续到最大的换行数量连续两次(只是试图对我为内部维基导入的某些文件进行一些清理)。 数据中有几行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 



+0

请参阅http://stackoverflow.com/questions/965427/why-doesnt-my-regular-expression-collapse-groups-of-newlines/965569#965569上的我的建议显示* how * you can best show your输入/输出的方式,我们可以看到它实际上包含了什么。 – ysth 2009-06-09 03:12:02

回答

6

尝试还可选配围绕这些新行遗留任何其他空白:

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

打败我吧:P – 2009-06-08 15:26:30

+1

为什么不用{3}来代替? – 2009-06-08 15:34:40

0

你尝试符合多个组这样的吗?

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

既然你似乎有给定应用的答案麻烦,也许你能告诉我们一些你的实际数据,与

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

您可能也想尝试一个通删除任何\ r字符,然后是原始的换行符替换。

相关问题