如何使用正则表达式进行部分替换?

时间:2015-02-24 12:04:28

标签: ruby regex

我在Ruby中有一个电子邮件地址,我需要通过用星号替换除前3个和后3个之外的所有字符进行混淆。换句话说:如果输入“abcd.ef@example.com”,则输出应为“abc ************* com”

Ruby有一个gsub方法,可以用给定的字符串替换所有出现的模式。我应该写什么正则表达式匹配所有要用星号替换的字符?换句话说,一个模式匹配最后三个中前三个NOR中所有字符都是NEITHER?

4 个答案:

答案 0 :(得分:5)

我会在没有正则表达式的情况下这样做:

email = 'abcd.ef@example.com'

email[3..-4] = '*' * email[3..-4].length

email # => "abc*************com"

答案 1 :(得分:1)

email.sub(/\A(...)(.*)(...)\z/) {|m| $1 + ("*" * $2.length) + $3 }

对非正则表达式解决方案投了1票。

答案 2 :(得分:1)

另一种选择:

email.gsub(email[3..-4], "*"*email[3..-4].size)
# => "abc*************com" 

答案 3 :(得分:0)

您是否需要确切数量的星号?如果不是,您可以使用此正则表达式:

(^.{3})(.*)(.{3}$)
  
      
  1. (^。{3})是第一组仅匹配前三个字符
  2.   
  3. (。*)匹配边界组之间的每个标记
  4.   
  5. (。{3} $)结束了群组最后三个字符
  6.   

知道了,您可以在替换中使用该正则表达式:

$1*****$3
  
      
  1. $ 1是第一个匹配的组(前三个字符)
  2.   
  3. 后面跟着五个星号
  4.   
  5. $ 3是第三个匹配组(最后三个字符)
  6.   

亲自尝试:http://www.regexe.com/并检查它是否适合您