Ruby 每隔一个字符替换一次
如何用正则表达式跳过或替换其他字符(可以是任何字符)Ruby 每隔一个字符替换一次,ruby,regex,Ruby,Regex,如何用正则表达式跳过或替换其他字符(可以是任何字符) "abc123.-def45".gsub(/.(.)?/, '@') 得到 "a@c@2@.@d@f@5" 替换第一个字符,并将其写回: "abc123.-def45".gsub(/(.)./, '\1@') 重要的是不要让第二个字符成为可选字符。否则,在奇数长度字符串中,最后一个字符将导致匹配,并将追加一个@。如果没有?,最后一个字符将失败并保持不变 您也可以这样做,以避免按顺序替换@ "abc123.-def45".gsub(/([
"abc123.-def45".gsub(/.(.)?/, '@')
得到
"a@c@2@.@d@f@5"
替换第一个字符,并将其写回:
"abc123.-def45".gsub(/(.)./, '\1@')
重要的是不要让第二个字符成为可选字符。否则,在奇数长度字符串中,最后一个字符将导致匹配,并将追加一个@
。如果没有?
,最后一个字符将失败并保持不变
您也可以这样做,以避免按顺序替换@
"abc123.-def45".gsub(/([^@])[^@]/, '\1@')
以下代码也将起作用:
irb(main):005:0> "abc123.-def45".chars.each_with_index.map {|e,i| !i.even? ? e = "@" : e}.join
=> "a@c@2@.@d@f@5"
但如果只有一个
@
,则这将抵消1的交替(从而替换奇数而不是偶数位置)。例如,abcd@efgh
将导致a@c@@e@g@
而不是a@c@@@f@h
。感谢你们两位展示了使用正则表达式的不同方法