2010-12-20 12 views
21

Ich denke, es ist eine einfache FrageWie entferne ich Teilstrings nach einem bestimmten Zeichen in einem String mit Ruby?

Wie mache ich das?

+1

Nun, ich glaube, der Titel ist selbsterklärend genug. Außerdem akzeptierte ich Jacobs Antwort vor ungefähr 13 Stunden, geben Sie anderen etwas Zeit; normalerweise aktualisieren Leute nicht die gleiche Seite und warten auf Antworten. – JayX

+1

Die Bearbeitung des Titels ist nicht von Vorteil. Es ist von Vorteil für andere, die nach einer Antwort auf das gleiche Problem suchen. Wenn du deinen Titel und deine Frage nicht klar stellst, tut dir das wirklich weh, denn niemand wird deine Frage auffrischen, wenn sie denken, dass sie nutzlos ist. Nur meine zwei Cent. – DJTripleThreat

+1

Die Frage erklärt nicht, wie lange der Teilstring ist, also ist er wirklich vage. Anscheinend wollten Sie, dass die Teilzeichenfolge unmittelbar nach der ersten Instanz eines bestimmten Zeichens beginnt und sich bis zum Ende der Hauptsaite erstreckt. Erwarte nicht, dass wir Gedanken lesen. Ein anderer Telepath könnte die gleiche Frage stellen wie Sie, aber eine andere Antwort verlangen, weil sie nur einen Teilstring der Länge 1 entfernen möchte. –

Antwort

31
new_str = str.slice(0..(str.index('blah'))) 

alt text

+3

str.slice (/.* r /) – eMgz

+1

Wenn Sie das Ende des Delimeters erreichen wollen: 'new_str = str.slice (0 .. (str.index ('blah') + 'blah'.length)) ' – mvndaai

+3

Was passiert, wenn das angegebene Zeichen nicht in der Zeichenfolge gefunden wird? –

4
str = "Hello World" 
stopchar = 'W' 
str.sub /#{stopchar}.+/, stopchar 
#=> "Hello W" 
+0

Sie arbeiteten beide, danke! – JayX

23

Ich finde, dass "Part1?Part2".split('?')[0] einfacher ist, zu lesen.

+3

, aber dann müssten Sie in der? wenn du es willst, so denke ich nicht, antwortet deine genaue Frage. – Ivan

+0

Ich mag diese Antwort, weil Sie nicht überprüfen müssen, ob "?" vorhanden ist, funktioniert es auch mit jeder anderen Zeichenkette ohne eine Ausnahme auszulösen. –

7

Ich bin überrascht, niemand ‚gsub‘

irb> "truncate".gsub(/a.*/, 'a') 
=> "trunca" 

Der Knall-Version von gsub zu verwenden vorgeschlagen verwendet werden kann, um die Zeichenfolge zu ändern.

+1

Meinst du nicht '/ (? <= A). * /' Oder '/ a \ K. * /', Um "" aus der Übereinstimmung auszuschließen? –

+0

@CarySwoveland Ja, richtig, oder den Char neu einführen. Netter Fang. – philant

Verwandte Themen