我正在尝试用', '
替换任何给定字符串中的最后一个逗号(' & '
)。
我不想使用任何正则表达式。
我可以使用哪些方法来实现以下伪代码:
find last x in string
replace last x with y
答案 0 :(得分:5)
sub
方法仅替换第一次出现,因此您可以再次reverse
,sub
和reverse
。
"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'
)然后将捕获组文本放在&
周围。