Рубиновое однострочное регулярное выражение для замены каждого символа \ d на "*"? - PullRequest
2 голосов
/ 05 января 2011

Как заменить каждый символ до определенной точки другим символом, если выполняется условие?

string = "401200******7777"

string.gsub!(/^\d+/) { |m| "*" * m.length }

puts string
# ************7777

Есть ли более простой / лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 05 января 2011

Не могу попробовать прямо сейчас, но это должно сработать:

string.gsub!(/(\d)(?=.*\*)/, '*')
0 голосов
/ 05 января 2011

Хммм ... единственный способ, который я изобрел сейчас, это использовать переменную флага + два регулярных выражения :

string = "401200******7777"
flag = true
string.gsub!(/./) { |i| (flag &&= i[/\d/]) ? "*" : i}

Но это не oneliner ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...