【问题标题】:How can I remove the string "\n" from within a Ruby string?如何从 Ruby 字符串中删除字符串“\n”?
【发布时间】:2011-05-10 14:24:33
【问题描述】:

我有这个字符串:

"some text\nandsomemore"

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

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

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

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

    您需要在 gsub 中使用 "\n" 而不是 '\n'。不同的引号表现不同。

    双引号" 允许字符扩展和表达式插值,即。它们允许您使用转义的控制字符,如 \n 来表示它们的真实值,在本例中为 newline,并允许使用 #{expression},因此您可以编织变量,而且,几乎任何将您喜欢的 ruby​​ 表达式添加到文本中。

    而另一方面,单引号 ' 按字面意思处理字符串,因此没有扩展、替换、插值或其他内容。

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

    See here for more info

    【讨论】:

    • 正确的语法应该是 .gsub(/\n/, "")
    • @David 是正确的。然而,我觉得重要的是要表明引用会有所作为,因为这将使 Ben 在这一点上受益。请注意,大卫,这可能更多的是风格问题而不是“正确”。我个人认为tr 是完成这项任务的更好选择,但正如我所说,我认为最好在回答时指出单引号和双引号的区别。
    • 为什么使用.delete.tr 更好?
    • 他们比 .gsub 更快,因为他们做的更少(.delete 很可能是最快的,尽管性能分析可以 100% 确认这一点。)
    【解决方案2】:

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

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

    【讨论】:

    • tr 和 replace 有什么区别?
    • replace 只是将字符串更改为新字符串,例如变量赋值;而tr 是逐个字符的全局查找和替换。
    • 和gsub的区别?
    【解决方案3】:

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

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

    x 现在等于“foofoo”

    在这种特定情况下,String#deletegsub 更具可读性,因为您实际上并没有用任何东西替换字符串。

    【讨论】:

    • 至少在 Ruby 1.9.3 中,delete 没有破坏性,如此处所示。它返回一个新字符串。
    • 很好看。我已经更新了代码 sn-p 以使用 mutator 版本 String#delete!而不是 String#delete
    【解决方案4】:

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

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

    如上所述here

    edit 此问题的原始标题不同。我的回答是针对最初的问题。

    【讨论】:

    • 这没有回答问题。 strip 只删除前导和尾随空格:ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
    • @mvdanj 是的,鉴于这个特定问题的详细信息,它没有回答它,但它确实根据标题回答了这个问题。我怀疑这就是人们发现它有用的原因。
    • 从我最初回答的时候起标题就改了。
    【解决方案5】:

    使用来自 Ruby 的 chompstrip 函数:

    "abcd\n".chomp => "abcd"
    "abcd\n".strip => "abcd"
    

    【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多