用'&;替换字符串中的最后一个逗号' - Ruby

时间:2017-02-19 17:19:53

标签: ruby-on-rails ruby string replace

我正在尝试用', '替换任何给定字符串中的最后一个逗号(' & ')。

我不想使用任何正则表达式。

我可以使用哪些方法来实现以下伪代码:

find last x in string
replace last x with y   

4 个答案:

答案 0 :(得分:5)

sub方法仅替换第一次出现,因此您可以再次reversesubreverse

"Ruby on Rails, Ruby, String, Replace".reverse.sub(',', '& ').reverse

答案 1 :(得分:1)

一次性解决方案:

>> "Lions, tigers, bears".tap{|s| s[s.rindex(', '), 2] = ' & '}
=> "Lions, tigers & bears"
  • tap为其块内的字符串文字指定变量名称。如果字符串已经为其分配了名称,则不需要这样做。
  • rindex在被调用的字符串中找到其参数的最后一次出现。
  • s[idx, len] = str使用len
  • 替换s位置idx中的str - 加长子字符串

答案 2 :(得分:0)

也许:

string = string.rpartition("&").map do |x|
    if x == "&"
        ","
    else
        x
    end
end.join("")

作品?

答案 3 :(得分:0)

您可以使用最后一个逗号周围的捕获组来执行此操作:

>> "one, two, three, four".gsub(/(.*),(.*)/, '\1 &\2')
=> "one, two, three & four"

这些组将匹配最后一个,,因为第一个捕获组(第一个(.*))是贪婪的。 .*将匹配尽可能多的文本,这意味着它将匹配最后一个,,然后第二个捕获组(.*)将匹配剩余的文本。

替换字符串('\1 &\2')然后将捕获组文本放在&周围。