2016-09-24 1 views
-3

Ich habe eine Textzeichenfolge wie folgt entfernen:Wie die {} und “aus der resultierenden Matrix mit Ruby

my_string = 'The {"apples" >> "apple"} {"do" >> "does"} not fall far from {+"the "}tree{"?" >> "!"}' 

I alle Inhalte zwischen den Streben extrahieren {} in ein Array die folgende Verwendung :

my_content = my_string.scan(/\{.*?\}/) 

Das Ergebnis ist:

["{\"apples\" >> \"apple\"}", 
"{\"do\" >> \"does\"}", 
"{+\"the \"}", 
"{\"?\" >> \"!\"}"] 

ich möchte den Inhalt haben:

["apples >> apple", "do >> does", "+the ", "? >> !"] 

Ich tue dies in einem sehr Noob (und schlecht) Art und Weise, wie folgt:

my_content = eval my_content.to_s.gsub('\"','') 
my_content = eval my_contents.to_s.gsub('{','') 
my_content = eval my_content.to_s.gsub('}','') 

Wie kann ich die Elemente entfernen will ich nicht richtig schließen?

Antwort

2
▶ my_string.scan(/(?<={).*?(?=})/).map { |s| s.delete '"' } 
#⇒ ["apples >> apple", "do >> does", "+the ", "? >> !"] 

Im ersten Schritt, den wir positive lookaround verwenden, auf die zweite One-Geting los, doppelte Anführungszeichen.

+0

genau das, was ich gesucht habe. Und danke für die Hilfe auf der Regex-Seite. – chell

0

Sie können dies versuchen: es wird jede erhaltene {}

/{(.[^}]*)}/g 

^} - stellt sicher, dass es nicht akzeptieren ‚}‘ wie in Ihrem Muster entsprechen und mit dem letzten ‚}‘ stellt sicher, es endet mit geschweifter Klammer.

Auf diese Weise können alle Instanzen bekommen, sonst mit Ihrem regex wird alles Schließen} als Insider-Spiel hören und stoppt erst im letzten}

+0

Haben Sie schon einmal die Frage gelesen? Hast du deinen regulären Ausdruck ausprobiert? – mudasobwa

+0

@mudasobwa Haben Sie gesehen, dass die Person die Frage wiederholt bearbeitet hat? mit der ersten Antwort, der Benutzer kam mit modifizierten Fragen? Was machst du eigentlich in diesem Fall, antwortest du weiter? Sie sind vielleicht nicht am Schreibtisch, wenn die zweite Frage eintrifft? Was würdest du fühlen, wenn dich jemand wegen der zweiten Frage abmahnt? –

+0

Oh, ich bitte um Entschuldigung. Ehrlich gesagt, kann ich mich immer noch nicht an diese "Bearbeitung nach Antworten" gewöhnen. Bitte editieren Sie die Antwort ein wenig, damit ich den Downvote zurückziehen kann. – mudasobwa

Verwandte Themen