我有一个字符串
Java \n\n c# \n\n c/c++
我需要替换它变成
Java \n c# \n c/c++
在Ruby String中使用正则表达式
由于
答案 0 :(得分:4)
使用String类的squeeze
函数
[18] pry(main)> "Java \n\n c# \n\n c/c++".squeeze("\n")
=> "Java \n c# \n c/c++"
但是,它会返回一个新字符串,其中此集合中出现的相同字符的运行将被单个字符替换,所以
[18] pry(main)> "Java \n\n\n\n\n c# \n\n\n\n\n c/c++".squeeze("\n")
=> "Java \n c# \n c/c++"
答案 1 :(得分:1)
你可能也希望消除三重等现象。在这种情况下,最好的选择是使用匹配计数器:
# ⇓⇓⇓⇓
'Java \n\n c# \n\n c/c++'.gsub /\\n{1,}/, '\n'
在这种特殊情况下,“一个或多个”有它的语法糖:
# ⇓
'Java \n\n c# \n\n c/c++'.gsub /\\n+/, '\n'
如果您使用的是Ruby2,则\R
匹配可匹配\r
和\n
的任意组合。
要消除恰好两个出现的情况,可以使用:
# ⇓⇓⇓
'Java \n\n c# \n\n c/c++'.gsub /\\n{2}/, '\n'
最后,有一个函数可以使用named matches和反向引用从字符串中删除多个\n
的出现:
def singlify s
s.gsub /(?<sym>\\n)\g<sym>+/, '\k<sym>'
end
singlify 'Java \n\n c# \n\n c/c++'
# Java \n c# \n c/c++'
答案 2 :(得分:0)
'Java \n\n c# \n\n c/c++'.gsub! /\\n\\n/, '\n'