Ruby 的String#gsub方法是否提供了包含替换索引的方法?例如,给定以下字符串:
我喜欢你,你,你,还有你。
我想结束这个输出:
我喜欢你1、你2、你3和你4。
我知道我可以使用\1
,\2
等来匹配括号中的字符,但是有没有类似的东西\i
可以\n
提供当前匹配的数量?
值得一提的是,我的实际术语并不像“你”那么简单,因此假设搜索词是静态的替代方法是不够的。
Ruby 的String#gsub方法是否提供了包含替换索引的方法?例如,给定以下字符串:
我喜欢你,你,你,还有你。
我想结束这个输出:
我喜欢你1、你2、你3和你4。
我知道我可以使用\1
,\2
等来匹配括号中的字符,但是有没有类似的东西\i
可以\n
提供当前匹配的数量?
值得一提的是,我的实际术语并不像“你”那么简单,因此假设搜索词是静态的替代方法是不够的。
我们可以链接with_index
到gsub()
:
foo = 'I like you, you, you, and you.'.gsub(/\byou\b/).with_index { |m, i| "#{m}#{1+i}" }
puts foo
输出:
I like you1, you2, you3, and you4.
这可行,但很丑:
n = 0;
"I like you, you, you, and you.".gsub("you") { val = "you" + n.to_s; n+=1; val }
=> "I like you0, you1, you2, and you3."
这有点 hacky,但是您可以使用在传递给 gsub 的块内递增的变量
source = 'I like you, you, you, and you.'
counter = 1
result = source.gsub(/you/) do |match|
res = "#{match}#{counter}"
counter += 1
res
end
puts result
#=> I like you1, you2, you3, and you4.