2011-01-05 4 views
2

Wie ersetzen Sie jedes Zeichen bis zu einem bestimmten Punkt durch ein anderes Zeichen, solange eine Bedingung erfüllt ist?Ruby Ein-Liner Regulärer Ausdruck, um jedes Zeichen d durch "*" zu ersetzen?

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

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

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

Gibt es einen einfacheren/besseren Weg, dies zu tun?

+1

Was magst du nicht an deiner Lösung? – marzagao

+0

@marzagao, ich nehme an, er will universelle Lösung für jede Art von "gsub" und jede Bedingung des Stopps. – Nakilon

Antwort

1

Kann es nicht versuchen Recht jetzt, aber das sollte den Trick tun:

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

http://ideone.com/v22iz – Nakilon

+2

Ich möchte Sie nur wissen lassen, dass ich nach ++ Sie zur Hölle und zurück für diesen Link gehen werde. – Hugmeir

+1

Hier scheitert es am 2. Test http://ideone.com/GdvEZ – Nakilon

0

Hmmm ... die einzige Art, wie ich jetzt Flagvariable + zwei reguläre Ausdrücke verwendet erfunden:

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

Aber es ist nicht oneliner ...

Verwandte Themen