2017-02-06 1 views
1

Ich benutze Ruby 2.4. Gibt es eine Möglichkeit, wie ich eine Regex teilen und die resultierenden Elemente in ein Array bekommen kann? Ich dachte, das die Art und WeiseWie teile ich eine Regex und bekomme meine Elemente in ein Array?

2.4.0 :003 > word = "4.ARTHUR" 
=> "4.ARTHUR" 
2.4.0 :004 > word.split(/^\d+\./) 
=> ["", "ARTHUR"] 

war aber wie Sie sehen, ist das erste Element meiner Array ist ein leerer String, trotz der Tatsache, dass das Muster übereinstimmt. Ich möchte die Ausgabe

["4.", "ARTHUR"] 
+0

Willst du '4.' im Array haben? Probiere 'word.split (/^(\ d + \.) /)' –

+0

THat bringt mich definitiv ein bisschen näher. Jetzt ist das Array ["", "4.", "ARTHUR"]. Gibt es einen Weg es so zu machen, dass es nur die zwei Elemente enthält? – Dave

+0

Entfernen Sie sie: 'word.split (/^(\ d + \.) /). Ablehnen {| c | c.leer? } ' –

Antwort

0

Hinweis sein, dass split die Zeichenfolge spaltet, wo eine Übereinstimmung gefunden wird. Also, ^\d+\. entspricht 4. in am Anfang und damit ist das Ergebnis eine leere Zeichenfolge (der Anfang der Zeichenfolge) und ARTHUR. Um das Spiel während split Betriebes mit einem regex erhalten bleiben, müssen Sie das gesamte Muster mit einer Erfassungsgruppe wickeln und die Beseitigung der leeren Elemente zu erhalten, können Sie sie einfach später entfernen:

word.split(/^(\d+\.)/).reject { |x| x.empty? } 
0

Warum nicht einfach tun

irb(main):004:0> word = "4.ARTHUR" 
=> "4.ARTHUR" 
irb(main):005:0> word.split('.') 
=> ["4", "ARTHUR"] 
0

Wenn Sie eine Zeichenfolge aufzuteilen, aber alle seine Teile zu halten, ist String#scan oft eine bessere Passform als String#split:

word = "4.ARTHUR" 
word.scan(/^\d+\.|.+/) 
# => ["4.", "ARTHUR"] 

Sehen Sie es auf repl.it: https://repl.it/F90q

0

Try this

a, b = word.match(/^(\d+\.)?(.*)/).captures 

Die split Methode mit einem Trennzeichen verwendet werden soll, wie zum Beispiel ein Komma. Was Sie tun, ist die Aufteilung der Zeichenfolge in zwei Teile ohne Trennzeichen, verwenden Sie einfach Erfassungsgruppen.

Verwandte Themen