2011-01-05 6 views
2

条件が満たされている限り、どのキャラクターを別のキャラクターに置き換えるのですか?Ruby One-liner dを "*"で置き換える正規表現ですか?

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

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

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

これを行うより簡単な方法がありますか?

+1

あなたのソリューションについて気に入っていないものはありますか? – marzagao

+0

@marzagao、私は彼がどんな種類の "gsub"とどんな停止の条件に対しても普遍的な解決を望んでいると思う。 – Nakilon

答えて

1

は、右のそれを試してみてくださいすることはできません今、これはトリックを行う必要があります:

string.gsub!(/(\d)(?=.*\*)/, '*') 
+2

http://ideone.com/v22iz – Nakilon

+2

私はちょうど私があなたに地獄に行き、そのリンクのために行くつもりであることを知らせたいと思います。 – Hugmeir

+1

ここで2番目のテストで失敗しますhttp://ideone.com/GdvEZ – Nakilon

0

うーん...私は今考案唯一の方法は、フラグ変数+ 2つの正規表現使用している:

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

をしかし、それは oneliner ではありません...

関連する問題