Verwendung der "Split" -Methode in Ruby

Wie Sie vielleicht bereits wissen, reiht sich ein Rubin sind was bekannt als erstklassige Objekte die eine Reihe von Methoden für Abfragen und Manipulationen verwenden.

Eine der grundlegendsten String-Manipulation Aktionen besteht darin, eine Zeichenfolge in mehrere Unterzeichenfolgen aufzuteilen. Dies würde zum Beispiel gemacht, wenn Sie eine Zeichenfolge wie haben"foo, bar, baz" und du willst die drei Saiten "foo", "bar" und "baz". Das Teilt Die Methode der String-Klasse kann dies für Sie erreichen.

Die grundlegende Verwendung von "Split"

Die grundlegendste Verwendung der Teilt Methode ist das Teilen einer Zeichenfolge basierend auf einem einzelnen Zeichen oder einer statischen Folge von Zeichen. Wenn das erste Argument von split eine Zeichenfolge ist, werden die Zeichen in dieser Zeichenfolge als Trennzeichen für Zeichenfolgen verwendet, während in durch Kommas getrennten Daten das Komma zum Trennen von Daten verwendet wird.

#! / usr / bin / env ruby
str = "foo, bar, baz"
setzt str.split (",")
instagram viewer
$ ./1.rb
foo
Bar
baz

Fügen Sie Flexibilität mit regulären Ausdrücken hinzu

Es gibt einfachere Möglichkeiten, die zu begrenzen Zeichenfolge. Die Verwendung eines regulären Ausdrucks als Trennzeichen macht die Aufteilungsmethode viel flexibler.

Nehmen Sie zum Beispiel wieder die Zeichenfolge "foo, bar, baz". Nach dem ersten Komma steht ein Leerzeichen, nach dem zweiten jedoch nicht. Wenn die Zeichenfolge "," als Trennzeichen verwendet wird, ist am Anfang der Zeichenfolge "bar" noch ein Leerzeichen vorhanden. Wenn die Zeichenfolge "," verwendet wird (mit einem Leerzeichen nach dem Komma), stimmt sie nur mit dem ersten Komma überein, da das zweite Komma kein Leerzeichen hinter sich hat. Es ist sehr einschränkend.

Die Lösung für dieses Problem besteht darin, anstelle eines Strings einen regulären Ausdruck als Trennzeichen zu verwenden. Mit regulären Ausdrücken können Sie nicht nur statische Zeichenfolgen, sondern auch eine unbestimmte Anzahl von Zeichen und optionale Zeichen abgleichen.

Regelmäßige Ausdrücke schreiben

Wenn Sie einen regulären Ausdruck für Ihr Trennzeichen schreiben, müssen Sie zunächst in Worten beschreiben, was das Trennzeichen ist. In diesem Fall ist der Ausdruck "ein Komma, auf das ein oder mehrere Leerzeichen folgen können" sinnvoll.

Diese Regex enthält zwei Elemente: das Komma und die optionalen Leerzeichen. Die Leerzeichen verwenden den Quantifizierer * (Stern oder Sternchen), was "null oder mehr" bedeutet. Jedes Element, das davor steht, stimmt null oder mehrmals überein. Zum Beispiel die Regex /a*/ stimmt mit einer Folge von null oder mehr 'a'-Zeichen überein.

#! / usr / bin / env ruby
str = "foo, bar, baz"
setzt str.split (/, * /)
$ ./2.rb
foo
Bar
baz

Begrenzung der Anzahl der Teilungen

Stellen Sie sich eine durch Kommas getrennte Wertzeichenfolge vor, z "10,20,30, Dies ist eine beliebige Zeichenfolge". Dieses Format besteht aus drei Zahlen, gefolgt von einer Kommentarspalte. Diese Kommentarspalte kann beliebigen Text enthalten, einschließlich Text mit Kommas. Verhindern Teilt Durch Aufteilen des Textes dieser Spalte können wir eine maximale Anzahl von Spalten festlegen, die geteilt werden sollen.

Hinweis: Dies funktioniert nur, wenn die Kommentarzeichenfolge mit dem beliebigen Text die letzte Spalte der Tabelle ist.

Um die Anzahl der Teilungen zu begrenzen, die die Teilungsmethode ausführt, übergeben Sie die Anzahl der Felder in der Zeichenfolge als zweites Argument wie folgt an die Teilungsmethode:

#! / usr / bin / env ruby
str = "10,20,30, 10, 20 und 30"
setzt str.split (/, * /, 4)
$ ./3.rb
10
20
30
Zehn, zwanzig und dreißig

Bonus Beispiel!

Was ist, wenn Sie verwenden möchten Teilt um alle Gegenstände außer dem allerersten zu bekommen?

Es ist eigentlich sehr einfach:

zuerst * rest = ex.split (/, /)

Die Grenzen kennen

Die Aufteilungsmethode weist einige ziemlich große Einschränkungen auf.

Nehmen Sie zum Beispiel die Zeichenfolge '10, 20, "Bob, Eve and Mallory", 30 '. Was beabsichtigt ist, sind zwei Zahlen, gefolgt von einer Zeichenfolge in Anführungszeichen (die Kommas enthalten kann) und einer weiteren Zahl. Split kann diese Zeichenfolge nicht korrekt in Felder unterteilen.

Dazu muss der String-Scanner sein StaatsbürgerlichDies bedeutet, dass es sich daran erinnern kann, ob es sich in einer Zeichenfolge in Anführungszeichen befindet oder nicht. Der geteilte Scanner ist nicht zustandsbehaftet und kann daher Probleme wie dieses nicht lösen.

instagram story viewer