替换所有其他角色

时间:2013-06-13 10:24:16

标签: ruby regex

我怎么能用正则表达式跳过或替换所有其他字符(可能是任何东西)?

"abc123.-def45".gsub(/.(.)?/, '@')

获取

"a@c@2@.@d@f@5"

3 个答案:

答案 0 :(得分:5)

Capture代替第一个字符,然后将其写回:

"abc123.-def45".gsub(/(.)./, '\1@')

重要的是不要使第二个字符成为可选字符。否则,在奇数长度的字符串中,最后一个字符将导致匹配,并且将附加@。如果没有?,最后一个字符将会失败并保持不变。

Working demo.

答案 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"