2012-04-01 13 views
4

Vielen Dank im Voraus ...Regex/Entfernen Strich von String in Ruby

ich mit regulären Ausdrücken in Ruby einige Probleme habe, oder sonst einen Weg finden, einen Schrägstrich aus einer Zeichenfolge zu entfernen. Hier ist, wie meine Zeichenfolge aussieht:

string = "word \/ word" 

Ich versuche, den umgekehrten Schrägstrich und den Schrägstrich zu entfernen; Ich möchte dieses Ergebnis:

Ich glaube, ich vermisse etwas mit Escape-Zeichen, oder wer weiß was!

Ich habe dies versucht:

string.gsub(/\//, "") 

, die den umgekehrten Schrägstrich wird entfernen, aber den Slash verlässt. Ich habe überall Varianten mit Escape-Zeichen ausprobiert und an Stellen, die nicht einmal Sinn ergeben!

Ich bin schrecklich mit Regex und werde sehr frustriert mit Strings im Allgemeinen arbeiten, und ich bin nur ratlos. Ich bin sicher, es ist etwas Offensichtliches, aber was vermisse ich?

+0

'string.gsub (/ \/| \\ /, "")' wird beiden Schrägstriche entfernen, aber wie Niklas B weist darauf hin, verwenden Sie besser String ersetzen . – Alan

+0

Es gibt eigentlich nur einen Schrägstrich in der Zeichenfolge, da der erste ein unnötiger Escape-Schrägstrich ist – pguardiario

+0

Keine tatsächliche Antwort, aber Sie können alternative Regex-Syntax verwenden, etwa wie 'string.gsub (% r! \\/!, '') 'um den Schmerz der 'Wie oft entgehe ich das?' Frage. – x1a4

Antwort

4

Der Grund dafür ist, dass sowohl / als auch \ keine gültigen Zeichen in einem Regexp sind. So müssen sie entkommen, indem sie eine \ vor ihnen setzen. So \ wird \\ und / werden \/. Setzt man diese zusammen in einem anderen Satz von Schrägstrichen ein Regexp wörtlichen zu machen, erhalten wir:

string.gsub(/#{Regexp.escape('\/')}/, "") 

Sie sollten Rubular für eine schöne Art und Weise überprüfen Regexp zu entwickeln:

string.gsub(/\\\//, "") 

Ein anderer Weg, dies zu schreiben ist Saiten.

http://rubular.com/r/ml1a9Egv4B

+0

Allerdings bevorzuge ich Niklas B. Lösung, da es nicht tut benutze kein Regexp. – nertzy

+0

Sie können die Regexp ohne Interpolation schreiben: 'string.gsub (Regexp.escape (" \/"), '')'. – steenslag

+0

Eigentlich macht das nicht das gleiche, @steenslag. Zunächst möchte ich darauf hinweisen, dass ich in meiner Antwort (die ich bearbeitet habe) einen Fehler hatte. Die Zeichenkette '\/'muss in einfache Anführungszeichen gesetzt werden, damit Ruby sie nicht nach'/'entschlüsselt. Als nächstes gibt 'Regexp.escape' eine Zeichenkette zurück, so dass Ihr Beispiel dies gerade tut:' string.gsub ('/', '') 'was nicht beabsichtigt ist.Stattdessen sollten Sie entweder direkt eine Zeichenkette angeben oder "Regexp.escape" verwenden, das in einer tatsächlichen Regexp interpoliert wird. Hoffentlich machte das alles Sinn! – nertzy

0

es tatsächlich tut, was wollen Sie aber nicht aus den Gründen, die Sie denken:

string = "word \/ word" 
# => "word/word" 
string.gsub(/\//, "") 
# => "word word" 

Hinweis: Sie gsub brauchen! Wenn Sie den Inhalt der Zeichenfolge ersetzen

2
str = "word \/ word" 
p str.delete('\/') #=>"word word" 
# to get rid of the double spaces: 
p str.delete('\/').squeeze(' ') #=>"word word" 
+0

Dies ist eine viel elegantere Art, es zu tun. – zachaysan