我怎么能用正则表达式跳过或替换所有其他字符(可能是任何东西)?
"abc123.-def45".gsub(/.(.)?/, '@')
获取
"a@c@2@.@d@f@5"
答案 0 :(得分:5)
Capture代替第一个字符,然后将其写回:
"abc123.-def45".gsub(/(.)./, '\1@')
重要的是不要使第二个字符成为可选字符。否则,在奇数长度的字符串中,最后一个字符将导致匹配,并且将附加@
。如果没有?
,最后一个字符将会失败并保持不变。
答案 1 :(得分:1)
您也可以这样做以避免在序列中替换@
"abc123.-def45".gsub(/([^@])[^@]/, '\1@')
答案 2 :(得分: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"