我的输入文件就像这样
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网站上完美运行。
是否还有其他正则表达式来搜索空行并组合空行前后的行?
答案 0 :(得分:2)
答案 1 :(得分:1)
答案 2 :(得分:1)
Sahil的解决方案并不像以前那样精致:
您可以匹配此模式:\n+\s
并替换为\n
。 Demo
这将以更少的步骤提供相同的结果。
要记住这个非常简单的任务需要注意的是,使用“替代方法”(管道|
)会为您的模式添加步骤,并且应尽可能避免使用。
如果需要替代品,请从最短到最长的顺序排序 - 这将提供更高的效率。
最后,不要在模式中重复使用量词,使用量词 - 这再次提高了性能。在比较\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()
是此方法的绝佳伴侣。