2016-08-12 1 views
5

Ich versuche, alle alphanumerischen Zeichen einer E-Mail mit dem Zeichen '#' zu ersetzen, indem Sie die Methode gsub verwenden, aber Ruby fügt einen umgekehrten Schrägstrich vor dem '@' Zeichen ein.Ungültige gsub Ersetzung

Z. B:

"[email protected]".gsub(/[a-z0-9]/, "#") kehrt "###\#@###.###" statt "####@###.###".

+0

Sie können auch mit der '\ W' metacharacter:' "[email protected]" .gsub (/ \ w/"#") ' – orde

+0

@ orde '\ w' und' [a-z0-9] 'sind verschiedene Zeichensätze. – mudasobwa

+1

Beachten Sie, dass der umgekehrte Schrägstrich nicht vor '@' eingefügt wird, sondern vor dem '#' vor '@'. – Stefan

Antwort

8

Es gibt "####@###.###" wie erwartet, versuchen Sie zu:

puts "[email protected]".gsub(/[a-z0-9]/, "#") 

Was Sie in IRB/Pry sehen ist die Vermeidung von #@ als String Interpolation interpretiert wird.

Bitte beachten Sie auch den sehr wertvollen Kommentar von @Stefan unten.

+2

Genauer gesagt das Ergebnis von [String # inspect] (http://ruby-doc.org/core-2.3.1/String.html#method-i-inspect). Ein '#' gefolgt von '$', '@' oder '{' wird mit Escapezeichen versehen. – Stefan

3

tr ist schneller als gsub:

puts "[email protected]".tr('a-zA-Z0-9', '#') 
# >> ###@###.###