在ruby中用不同的字符串交换每个事件
我有一个按正确顺序排列的字符串数组。我想这样做:在ruby中用不同的字符串交换每个事件,ruby,string,gsub,Ruby,String,Gsub,我有一个按正确顺序排列的字符串数组。我想这样做: text.gsub!(/my_pattern/, array[i++]) 换句话说,我想用数组[0]交换我的_模式的第一次出现,用数组[1]交换第二次出现。有什么提示吗?接受可选块。块的返回值用作替换字符串 用于: 这应该可以做到: replacements = array.dup text.gsub!(/my_pattern/) { |_| replacements.shift || 'no replacements left' } 首先使
text.gsub!(/my_pattern/, array[i++])
换句话说,我想用数组[0]交换我的_模式的第一次出现,用数组[1]交换第二次出现。有什么提示吗?接受可选块。块的返回值用作替换字符串
用于:
这应该可以做到:
replacements = array.dup
text.gsub!(/my_pattern/) { |_| replacements.shift || 'no replacements left' }
首先使用array.dup
复制数组,因为shift
修改数组。如果数组中的匹配项多于个元素,则该模式将替换为字符串无替换项
。如果要在数组中没有元素时保持匹配不变,请执行以下操作:
text.gsub!(/my_pattern/) { |match| replacements.shift || match }
单向:
array = ['first', 'second', 'third', 'forth', 'fifth']
text = 'my_pattern, my_pattern, my_pattern, my_pattern'
enum = array.to_enum
text.gsub!(/my_pattern/) { enum.next }
#=> "first, second, third, forth"
text
#=> "first, second, third, forth"
如果在到达数组末尾时调用(即,如果要替换的字符串多于
arr
的元素),将引发StopIterator
异常。如果您担心这种可能性,则需要解救块中的异常
,并对其进行适当处理 @zenn1337,欢迎来到堆栈溢出!有些人试图回答你的问题。如果这对你有帮助,你可以告诉社区,这对你来说是最有用的……是的,当然可以,但不要急于这么做。有些海报在选择答案之前会等待几个小时,有时是几天,部分原因是他们不希望阻止发布更多可能更好的答案。我想你的意思是,对于每个I=0,1,2…
,匹配的I
第个字符串将替换为array[I]
。是的,这正是我想做的。
array = ['first', 'second', 'third', 'forth', 'fifth']
text = 'my_pattern, my_pattern, my_pattern, my_pattern'
enum = array.to_enum
text.gsub!(/my_pattern/) { enum.next }
#=> "first, second, third, forth"
text
#=> "first, second, third, forth"