我使用某些用户的生产数据进行测试和开发。所以基本上我想把数据转换成
MohanMxxxx
SujeetSxxxxx
我用过的:

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匹配非空格字符。

10-07 13:59