我使用某些用户的生产数据进行测试和开发。所以基本上我想把数据转换成Mohan
至Mxxxx
或Sujeet
到Sxxxxx
我用过的:
2.0.0-p594 :053 > a = "Mohini".split("")
=> ["M", "o", "h", "i", "n", "i"]
2.0.0-p594 :054 > x = a.shift
=> "M"
2.0.0-p594 :055 > x+a.join().gsub(/\w/, "x")
=> "Mxxxxx"
对我来说似乎工作得很好,但是有没有更优雅的方式来做这个,而不是分裂和加入。
最佳答案
使用下面的正则表达式并用x
替换匹配的字符
(?<=.).
dot
.
是regex中与任何字符匹配的特殊元字符。正的lookbehind断言匹配必须以lookbehind内的模式匹配的字符开头。在我们的例子中,上面的regex匹配前面有一个字符的所有字符。所以它匹配除第一个字符之外的所有字符,因为在第一个字符之前没有字符存在。DEMO
> "Sujeet".gsub(/(?<=.)./, "x")
=> "Sxxxxx"
> "Mohan".gsub(/(?<=.)./, "x")
=> "Mxxxx"
将
Mohan Kumar Singh
更改为Mxxxx Kxxxx Sxxxx
的其他方法> "Mohan Kumar Singh".gsub(/[a-z]/, "x")
=> "Mxxxx Kxxxx Sxxxx"
> "Mohan Kumar Singh".gsub(/[^A-Z\s]/, "x")
=> "Mxxxx Kxxxx Sxxxx"
> "Mohan Kumar Singh".gsub(/\B./, "x")
=> "Mxxxx Kxxxx Sxxxx"
将
Mohan Kumar Singh
更改为Mxxxx xxxxx xxxxx
> "Mohan Kumar Singh".gsub(/(?<=.)\S/, "x")
=> "Mxxxx xxxxx xxxxx"
\S
匹配非空格字符。