【问题标题】:using gsub in ruby strings correctly在 ruby​​ 字符串中正确使用 gsub
【发布时间】:2013-08-14 03:27:50
【问题描述】:

我有这样的表达方式:

channelName = rhash["Channel"].gsub("'", " ")

它工作正常。但是,我只能用它替换 1 个字符。我想添加更多字符来替换。所以我尝试了以下方法:

channelName = rhash["Channel"].gsub(/[':;] /, " ")

这不起作用,即没有对字符串进行替换,也没有错误消息。我也试过这个:

channelName = rhash["Channel"].gsub!("'", " ")

这导致一个空白字符串。所以绝对不是我想要的。

我想要一个 gsub 方法来用我的字符串中的空格替换以下字符:

 ' ; :

我的问题:

  1. 如何构造我的 gsub 方法,以便将上述字符的所有实例都替换为空格?

  2. gsub 发生了什么!以上作为它返回一个空白。

【问题讨论】:

  • 空格在正则表达式中很重要...
  • @meagar 除非您使用x 选项对吗? ruby-doc.org/core-2.0/Regexp.html#label-Options
  • 为什么不将String#tr 用于这样的简单事情?
  • @muistooshort 太棒了,谢谢。是的,我什至没有看过那个方法。这就是我喜欢 SO 的原因,总有一种解决问题的新方法要学习.......谢谢!我会试试的。一个快速的问题。 “tr”方法比gsub更高效吗?
  • tr 可能比 gsub 快,但是 (a) 正则表达式引擎可能会非常快,(b) 差异可能与所有实际目的无关,并且 (c) 你总是可以@ 987654323@看看。

标签: ruby string gsub


【解决方案1】:

您的第二次尝试非常接近。问题是您在右括号后留下了一个空格,这意味着它只是在寻找那些后跟空格的符号之一。

试试这个:

channelName = rhash["Channel"].gsub(/[':;]/, " ")

【讨论】:

  • 同上这个答案。此外,如果没有执行替换,string.gsub!("'", " ") 将返回 nil,因此您可能会看到 rhash["Channel"] = nil。见:ruby-doc.org/core-2.0/String.html#method-i-gsub-21
  • @jslivka 感谢您的澄清 +1。我想知道为什么会这样。
【解决方案2】:

这并不能回答您的问题,但却是一种更好的方法。

channelName = rhash["Channel"].tr("':;", " ")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多