如何使用Ruby的gsub函数替换字符串上过多的'\ n'

时间:2013-04-27 05:55:41

标签: ruby regex replace gsub

我有这个字符串:

string = "SEGUNDA A SEXTA\n05:24 \n05:48\n06:12\n06:36\n07:00\n07:24\n07:48\n\n08:12 \n08:36\n09:00\n09:24\n09:48\n10:12\n10:36\n11:00 \n11:24\n11:48\n12:12\n12:36\n13:00\n13:24\n13:48 \n14:12\n14:36\n15:00\n15:24\n15:48\n16:12\n16:36 \n17:00\n17:24\n17:48\n18:12\n18:36\n19:00\n19:48 \n20:36\n21:24\n22:26\n23:15\n00:00\n"

我想将所有\n\n个匹配项替换为只有一个\n,如果可能,我还要删除这些数字之间的所有" "(空格)和换行符\n

我正在尝试:

string.gsub(/\n\n/, '\n')

但它正在用\n\n

替换\\n

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

真正的原因是因为单引号蜇不会转义特殊字符(例如\ n)。

string.gsub(/\n/, '\n')

它用两个字符替换一个单个字符\ n' \'和' n'

您可以通过打印字符串来查看差异:

[302] pry(main)> puts '\n'
\n
=> nil

[303] pry(main)> puts "\n"

=> nil

[304] pry(main)> string = '\n'
=> "\\n"
[305] pry(main)> string = "\n"
=> "\n"

答案 1 :(得分:5)

我认为你在寻找:

string.gsub( / *\n+/, "\n" )

这将搜索零个或多个空格,后跟一个或多个换行符,并将匹配替换为单个换行符。