如何从Ruby字符串中删除字符串"\n"?

ben*_*ben 110 ruby regex

我有这个字符串:

"some text\nandsomemore"
Run Code Online (Sandbox Code Playgroud)

我需要从中删除"\n".我试过了

"some text\nandsomemore".gsub('\n','')
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我该怎么做?谢谢阅读.

oco*_*odo 160

您需要使用"\n"'\n'在您的GSUB.不同的引号表现不同.

双引号"允许字符扩展和表达式插值,即.它们允许你使用转义控制字符\n来表示它们的真实值,在这种情况下,换行符,并允许使用,#{expression}这样你就可以编织变量,以及你喜欢的任何ruby表达式.

另一方面,单引号'按字面意思处理字符串,因此没有扩展,替换,插值或者你有什么.

在这种特殊情况下,最好使用.delete.trString方法删除换行符.

有关详细信息,请参见此处

  • 正确的语法真的是.gsub(/ \n /,"") (16认同)
  • @David是对的.但是,我觉得重要的是要证明引号有所不同,因为这样会使Ben受益.请注意,大卫,这可能更像是风格而非"正确".我个人认为`tr`是这个任务的更好选择,但正如我所说的,当我回答时,我认为最好指出单引号,双引号的区别. (2认同)
  • 它们比“.gsub”更快,因为它们执行的操作更少(“.delete”很可能是最快的,尽管性能分析可以很好地 100% 确认这一点。) (2认同)

Pau*_*der 56

当你想删除一个字符串,而不是替换它时,你可以使用String#delete(或其mutator等价物String#delete!),例如:

x = "foo\nfoo"
x.delete!("\n")
Run Code Online (Sandbox Code Playgroud)

x 现在等于"foofoo"

在这个特定的情况下,由于您实际上没有用任何东西替换字符串,String#delete因此更具可读性gsub.

  • 至少在Ruby 1.9.3中,`delete`不具有破坏性,如此处所示.它返回一个新字符串. (3认同)

Tho*_*asW 52

如果您想要或不介意删除字符串中的所有前导和尾随空格,则可以使用该strip方法.

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"
Run Code Online (Sandbox Code Playgroud)

这里提到的.

编辑这个问题的原始标题是不同的.我的答案是针对原始问题.

  • 这不回答这个问题.`strip`只删除前导和尾随空格:http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 (2认同)

Mar*_*mas 29

你不需要正则表达式.使用tr:

"some text\nandsomemore".tr("\n","")
Run Code Online (Sandbox Code Playgroud)


小智 17

使用chompstrip来自Ruby的功能:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
Run Code Online (Sandbox Code Playgroud)

  • 这不回答这个问题.`strip`只删除前导和尾随空格 - http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 (2认同)
  • chomp是最好的方式......不敢相信这有如此少的upvotes (2认同)
  • 在 chomp 方法中,如果 \n 和 \r 存在,将从 str 的末尾删除,而不是在中间。所以这不能解决 OP 问题 (2认同)