【问题标题】:How to use Ruby's gsub function to replace excessive '\n' on a string如何使用 Ruby 的 gsub 函数替换字符串上过多的 '\n'
【发布时间】:2013-04-27 05:55:41
【问题描述】:

我有这个字符串:

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

谁能帮帮我?

【问题讨论】:

  • 只需将单引号替换为双引号即可。你可以让它更简洁:string.gsub(/\n{2}/, "\n").
  • 并删除数字之间的空格?
  • 我不敢回答这个问题,但是如何:string.gsub(/(?<=\d)\s\n/, "")?
  • @squiguy - 从技术上讲,这是一个不那么简洁的字符。

标签: ruby regex replace gsub


【解决方案1】:

真正的原因是因为单引号字符串不会转义特殊字符(如 \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"

【讨论】:

  • “单引号字符串不会转义特殊字符”是不真实的,它会转义所有内容。结果 '\n' 等价于 "\\n"。
【解决方案2】:

我想你正在寻找:

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

这会搜索零个或多个空格,后跟一个或多个换行符,并用一个换行符替换匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多