Mac*_*cha 24 ruby regex newline
我有一个用ruby编写的脚本.我需要删除任何重复的换行符(例如)
\n
\n
\n
Run Code Online (Sandbox Code Playgroud)
至
\n
Run Code Online (Sandbox Code Playgroud)
我当前的尝试有效(或者更确切地说)没有使用
str.gsub!(/\n\n/, "\n")
Run Code Online (Sandbox Code Playgroud)
这让我没有改变输出.我究竟做错了什么?
Cha*_*ens 33
这对我有用:
#!/usr/bin/ruby
$s = "foo\n\n\nbar\nbaz\n\n\nquux";
puts $s
$s.gsub!(/[\n]+/, "\n");
puts $s
Run Code Online (Sandbox Code Playgroud)
gio*_*ele 10
使用更惯用String#squeeze
而不是gsub
.
str = "a\n\n\nb\n\n\n\n\n\nc"
str.squeeze("\n") # => "a\nb\nc"
Run Code Online (Sandbox Code Playgroud)
你确定它不应该是 /\n\n\n/, "\n" 你在上面的问题中似乎想要的。
另外,您确定它不是在执行 Windows 换行符 "\r\n" 吗?
编辑:附加信息
每条评论
“换行符的数量可以改变。不同的行有 2 到 5 个换行符。”
如果你只想打 2-5 行试试这个
/\n{2,5}/, "\n"
Run Code Online (Sandbox Code Playgroud)
简单地分割和重新组合线将产生期望的结果
>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"
Run Code Online (Sandbox Code Playgroud)
编辑:我刚注意到这将用换行替换所有空格子串,例如
>> "one two three\n".split.join("\n")
=> "one\ntwo\nthree"
Run Code Online (Sandbox Code Playgroud)
首先检查这是你想要的!
您需要将多个换行符匹配到无限量.您的代码示例只需稍微调整即可:
str.gsub!(/\n+/, "\n")
Run Code Online (Sandbox Code Playgroud)
例如:
str = "this\n\n\nis\n\n\n\n\na\ntest"
str.gsub!(/\n+/, "\n") # => "this\nis\na\ntest"
Run Code Online (Sandbox Code Playgroud)