Joh*_*ith 3 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
我有以下字符串:
",||||||||||||||"
",|||||a|||||,|"
Run Code Online (Sandbox Code Playgroud)
我想实现所有事件",|"都被替换",,"
输出应如下:
",,,,,,,,,,,,,,,"
",,,,,,a|||||,,"
Run Code Online (Sandbox Code Playgroud)
当我.gsub(',|', ',,')在字符串上运行时,我得到的不是所需的输出.
",,|||||||||||||"
",,||||a|||||,,"
Run Code Online (Sandbox Code Playgroud)
那是因为它没有gsub多次运行.是否有类似的递归运行方法.
正则表达式匹配不能重叠.因为匹配是用于替换的,所以你不能这样做.这是两个解决方法:
str = ",|||||a|||||,|"
while str.gsub!(/,\|/, ',,'); end
str = ",|||||a|||||,|"
str.gsub!(/,(\|+)/) { "," * ($1.length + 1) }
Run Code Online (Sandbox Code Playgroud)
smoke_weed_every_day = lambda do |piper|
commatosed = piper.gsub(',|', ',,')
commatosed == piper ? piper : smoke_weed_every_day.(commatosed)
end
smoke_weed_every_day.(",||||||||||||||") # => ",,,,,,,,,,,,,,,"
smoke_weed_every_day.(",|||||a|||||,|") # => ",,,,,,a|||||,,"
Run Code Online (Sandbox Code Playgroud)