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


115

我有这个字符串:

"some text\nandsomemore"

我需要从中删除“ \ n”。我试过了

"some text\nandsomemore".gsub('\n','')

但这不起作用。我该怎么做?谢谢阅读。

Answers:


172

您需要在您的gsub中使用"\n"not '\n'。不同的引号具有不同的行为。

双引号"允许字符扩展和表达式内插,即。它们使您可以使用转义的控制字符\n来表示其真实值(在本例中为newline),并允许使用,#{expression}这样您就可以将变量以及几乎所有喜欢的ruby表达式编织到文本中。

另一方面,单引号会'按字面意义对待字符串,因此没有扩展,替换,内插或其他功能。

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

在这里查看更多信息


17
正确的语法实际上是.gsub(/ \ n /,“”)
boulder_ruby12 2011年

2
@David是正确的。但是,我觉得重要的是要证明报价有区别,因为这将使Ben在这一点上受益。大卫,请注意,这可能更多是风格问题,而不是“正确”问题。就个人而言,我认为这tr是一个更好的选择,但是正如我所说,我认为最好在回答时指出单引号,双引号的区别。
ocodo 2012年

60

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

x = "foo\nfoo"
x.delete!("\n")

x 现在等于“ foofoo”

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


3
至少在Ruby 1.9.3中,delete不是破坏性的,如此处所示。它返回一个新字符串。
布伦特·迪林汉姆

发现得好。我已经更新了该代码段以使用增变器版本String#delete!而不是String#delete
Paul Leader

56

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

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

这里提到的。

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


2
这不能回答问题。strip仅删除开头
thelostspore

1
@mvdanj是的,鉴于此特定问题的详细信息,它不会回答,但仅根据标题回答问题。我怀疑这就是为什么人们发现它有用。
ThomasW

从我最初回答时起,标题已更改。
ThomasW

29

您不需要正则表达式。使用tr:

"some text\nandsomemore".tr("\n","")

tr a replace和有什么不一样?
阿诺德·罗阿

replace只需将字符串更改为新的字符串,例如变量分配;而是tr逐字符全局查找和替换。
马克·托马斯


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.