2014-12-22 5 views
2

Я использую производственные данные определенных пользователей для использования в целях тестирования и разработки. Поэтому в основном я хочу, чтобы преобразовать данные похожийИдентификация производственных данных

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" 

, кажется, работает хорошо для меня, но есть более элегантный способ сделать это, вместо того, чтобы расщепляться и соединяться.

ответ

4

Используйте ниже регулярных выражений и заменить соответствующий символ на x

(?<=.). 

Dot . это специальный мета-символ в регулярном выражении, который соответствует любому символу. Положительный Lookbehind утверждает, что совпадению должны предшествовать символы, которые соответствуют шаблону внутри lookbehind. В нашем случае указанное выше регулярное выражение соответствует всем символам, которым предшествует символ. Таким образом, он соответствует всем символам, кроме первого, потому что перед первым символом существует символ.

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 соответствует некосмическими персонаж.

+0

большое спасибо брату. – aelor

+0

Welcome bro :-) –

+0

У меня есть решение, оцените вашу помощь – aelor

1

Не очень элегантно, но гораздо проще:

name = "Mohan" 
name[0, 1] + "x"*(name.size-1) 
#=> "Mxxxx" 

Если имя содержит FULLNAME, он все еще может быть сделано таким образом, однако он не будет, что довольно:

name = "Sujeet Singh" 
name.split.collect {|n| n[0, 1] + "x"*(n.size-1)}.join(' ') 
#=> "Sxxxxx Sxxxx" 

или

name = "Mohan Kumar Singh" 
name.split.collect {|n| n[0, 1] + "x"*(n.size-1)}.join(' ') 
=> "Mxxxx Kxxxx Sxxxx" 
+0

hmm thats один из способов сделать это, спасибо! Мне нужно, чтобы он работал с такими строками, как «Sujeet Singh», на «Sxxxxx xxxxx». Посмотрите, можете ли вы заставить его работать таким образом – aelor

+0

aelor, который меняет вопрос. Не меняйте его здесь. Измените свой вопрос! –

Смежные вопросы