Was ist der "ruby-way", eine Zeichenfolge zu analysieren, die für ein einzelnes Schlüssel/Wert?
Ich versuche zu analysieren, eine multi-line-string und den rest der Zeile nach einem Muster.
text:
Hallo john Ihr Benutzername ist: jj vielen Dank für Ihre Anmeldung
Möchte ich extrahieren jj, aka alles was nach "Ihr Benutzername ist: "
Einen Weg:
text = "hello john\nyour username is: jj\nthanks for signing up\n"
match = text[/your username is: (.*)/]
value = $1
Aber das erinnert mich an perl... und nicht "Lesen" so natürlich wie ich bin sagte ruby sollte.
Gibt es einen saubereren Weg? AKA "ruby" Weg?
Dank
Ruby war tatsächlich ziemlich stark inspiriert von Perl; es sollte passen, in der gleichen Nische wie Perl, aber mit einem schönen Objekt-system und der syntax, die war sauberer und regelmäßiger. Es hat tatsächlich eine Reihe von features, die gerade von Perl, wie ruby -p -i-e, obwohl einige der mehr wie Perl-Funktionen sind veraltet jetzt.
InformationsquelleAutor SWR | 2009-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code ist so ziemlich die Ruby Weg. Wenn Sie nicht möchten, verwenden Sie die Globale
$1
verwenden, können Sie die 2-arg-versionString#[]
:InformationsquelleAutor outis
Den split Befehl ist mindbogglingly nützlich. Es teilt einen string in ein array von Teilstrings, die Trennung auf, was Sie übergeben. Wenn Sie nicht geben es irgendwelche Argumente, teilt es auf Leerzeichen. Wenn Sie also wissen, das Wort, das Sie suchen, ist die fünfte "Wort" (Aufteilung auf die beiden Räume und der Wagenrücklauf), können Sie dies tun:
..aber vielleicht ist das nicht ausreichend selbsterklärend, oder Sie möchten, dass für multi-word entspricht. Man könnte dies statt:
Oder vielleicht verständlicher Art und Weise:
+1 für einen interessanten Einsatz von split, um die fünfte Wort, ich hatte nicht bemerkt, dass.
Wow, vielen Dank für die mehrfachen Angriff Pfade. 😉 Ich hatte nicht bemerkt das split-Möglichkeit, aber die eingehenden text ist nicht statisch (das Beispiel war stark vereinfacht) so funktioniert es nicht... aber es war ein schöner Weg, um das problem angreifen.
Matt: Der einzige Grund für den split auf so etwas wie "username:" oder "dein Benutzername ist:" ist es ein wenig mehr offensichtlich, was der code tut. Es sagt, um die spätere Wartung Programmierer "oh, dies ist immer die 'username: 'text" und nicht als "das ist immer das Letzte Wort von irgendeiner Linie (unbekannter Herkunft)". Obwohl ich vermute, könnte man erreichen das gleiche Ziel durch die Benennung der Variablen somehing besser als "match" und "Mittellinie"...
InformationsquelleAutor glenra
Nicht sicher, ob es mehr Ruby ' ish, aber eine andere Möglichkeit:
InformationsquelleAutor dbr
Gibt es auch
Regexp#match
gibt eineMatchData
- Objekt, das alle Informationen, die Sie möglicherweise interessieren könnten.InformationsquelleAutor rampion