如何使用正则表达式删除两行之间的空格?

时间:2017-02-22 06:24:52

标签: regex apache-nifi

我的输入文件就像这样

Header1,,,,,,,,,,,
c1 , c2 , c3 ,,,,

 22-02-2017,1-2,10,,,,
 22-02-2017,2-3,11,,,,

 22-02-2017,4-6,10,,,,
 22-02-2017,5-8,11,,,,

我需要正则表达式以达到低于预期的输出:

Header1,,,,,,,,,,,
c1 , c2 , c3 ,,,,
22-02-2017,1-2,10,,,,
22-02-2017,2-3,11,,,,
22-02-2017,4-6,10,,,,
22-02-2017,5-8,11,,,,

我在REplaceText中为搜索\ s \ n尝试此正则表达式,替换值为\ n。

替换下面的文本输出内容。,

Header1,,,,,,,,,,,c1 , c2 , c3 ,,,,22-02-2017,1-2,10,,,,22-02-2017,2-3,11,,,,22-02-2017,4-6,10,,,,

但我的正则表达式在regexr网站上完美运行。

http://regexr.com/3fbse

是否还有其他正则表达式来搜索空行并组合空行前后的行?

3 个答案:

答案 0 :(得分:2)

是的,您也可以尝试以下内容来搜索空行并将其删除。

regex search >> /\n+/g
replace with >> \n

请参阅demo

答案 1 :(得分:1)

搜索:\n\n\s|\n\s

替换:\n

Regex Demo

答案 2 :(得分:1)

Sahil的解决方案并不像以前那样精致:

您可以匹配此模式:\n+\s并替换为\nDemo

这将以更少的步骤提供相同的结果。

要记住这个非常简单的任务需要注意的是,使用“替代方法”(管道|)会为您的模式添加步骤,并且应尽可能避免使用。

如果需要替代品,请从最短到最长的顺序排序 - 这将提供更高的效率。

最后,不要在模式中重复使用量词,使用量词 - 这再次提高了性能。在比较\n\n\s|\n\s\n{2}\s|\n\s时,后者只需使用{2}量词即可胜过前者。

可能最好的建议是用file()(提供一系列行)来读取你的文件并设置所需的标志。

$array = file('yourfile.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

这可以防止需要使用正则表达式或替换字符串函数执行额外的准备步骤。

fgetcsv()是此方法的绝佳伴侣。