Ich versuche, eine Zahl aus einer Zeichenfolge zu extrahieren.
Und mach so etwas wie [0-9]+
an der Schnur "aaa12xxx"
und hol "12"
.
Ich dachte, es wäre so etwas wie:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
Und dann dachte ich mir ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Aber ich habe eine Antwort bekommen:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Es gibt ein kleines Detail, das mir fehlt.
?str_extract
sah ichstr_extract_all
und das Leben war wieder gut.Es ist wahrscheinlich etwas voreilig, " Standardfunktionen ignorieren" zu sagen - die Hilfedatei für
?gsub
sogar spezifische Verweise in "Siehe auch":Das wird also funktionieren und ist ziemlich einfach:
quelle
Vielleicht
quelle
Sie können das Lazy Matching von PERL Regexs verwenden:
Der Versuch, nicht-stellige Zahlen zu ersetzen, führt in diesem Fall zu einem Fehler.
quelle
Ein Weg wäre folgender:
Beachten Sie, dass Sie mit regexpr die Start- und Endindizes der Zeichenfolge erhalten:
Sie können diese Informationen also mit der substr-Funktion verwenden
Ich bin sicher, es gibt einen eleganteren Weg, dies zu tun, aber dies war der schnellste Weg, den ich finden konnte. Alternativ können Sie sub / gsub verwenden, um zu entfernen, was Sie nicht möchten, und das zu lassen, was Sie möchten.
quelle
Verwenden Sie Erfassungsklammern im regulären Ausdruck und Gruppenreferenzen im Ersatz. Alles in Klammern wird erinnert. Dann wird auf sie über \ 2, das erste Element, zugegriffen. Der erste Backslash entgeht der Interpretation des Backslash in R, sodass er an den Parser für reguläre Ausdrücke übergeben wird.
quelle
Verwenden Sie Strapply im gsubfn-Paket. strapply ist insofern wie apply, als die Argumente Objekt, Modifikator und Funktion sind, außer dass das Objekt ein Vektor von Zeichenfolgen (anstelle eines Arrays) und der Modifikator ein regulärer Ausdruck (anstelle eines Randes) ist:
Dies besagt, dass eine oder mehrere Ziffern (\ d +) in jeder Komponente von x übereinstimmen sollen, wobei jede Übereinstimmung als numerisch durchlaufen wird. Es gibt eine Liste zurück, deren Komponenten Vektoren von Übereinstimmungen der jeweiligen Komponenten von x sind. Wenn wir uns die Ausgabe ansehen, sehen wir, dass die erste Komponente von x eine Übereinstimmung hat, die 13 ist, und die zweite Komponente von x zwei Übereinstimmungen hat, die 12 und 34 sind. Weitere Informationen finden Sie unter http://gsubfn.googlecode.com .
quelle
Eine andere Lösung:
quelle
Ein wichtiger Unterschied zwischen diesen Ansätzen ist das Verhalten bei Nichtübereinstimmungen. Beispielsweise gibt die regmatches-Methode möglicherweise keine Zeichenfolge mit derselben Länge wie die Eingabe zurück, wenn nicht an allen Positionen eine Übereinstimmung vorliegt
quelle
Mit dem Paket unglue würden wir Folgendes tun:
Erstellt am 06.11.2019 durch das reprex-Paket (v0.3.0)
Verwenden Sie das
convert
Argument, um automatisch in eine Zahl umzuwandeln:quelle
Sie können Ihre Regex-Funktionen mit C ++ schreiben, sie in eine DLL kompilieren und von R aus aufrufen.
Rufen Sie R as an
quelle