Gibt es eine gegebene Anzahl regulärer Ausdrücke, gibt es eine einfache Möglichkeit, mehrere Muster zu vergleichen und den übereinstimmenden Text entsprechend dem übereinstimmenden Muster zu ersetzen?
Für die folgenden Daten x
beginnt jedes Element entweder mit einer Zahl oder einem Buchstaben und endet mit einer Zahl oder einem Buchstaben. Nennen wir diese Muster num_num
(für beginnt mit Zahl, endet mit Zahl), num_let
(beginnt mit Zahl, endet mit Buchstaben), let_num
und let_let
.
Um jede Zeichenfolge durch den Namen des folgenden Musters zu ersetzen, könnten wir Folgendes tun:
%Vor%Gibt es einen effizienteren Ansatz?
gsubfn
? Ich weiß, dass wir mit gsubfn
gleichzeitig verschiedene Übereinstimmungen ersetzen können, z. B .:
, aber ich bin mir nicht sicher, ob die Ersetzungen von dem Muster, das mit verglichen wurde, und nicht von der Übereinstimmung selbst abhängig gemacht werden sollten.
stringr
? str_replace_all
funktioniert nicht gut mit diesem Beispiel, da Matches iterativ für Muster ersetzt werden und am Ende alles mit let_let
überschrieben wird:
Um type
neu anzuordnen, damit das Muster, das let_let
entspricht, zuerst das Problem löst, macht es mich nervös.
Wir können str_replace_all
verwenden, wenn wir die Ersetzungen so ändern, dass sie keinem der regulären Ausdrücke mehr entsprechen, und fügen Sie dann einen zusätzlichen Ersatz hinzu, um sie in ihre ursprüngliche Form zurückzuversetzen. Zum Beispiel
Ein anderer Ansatz ist zuerst die Übereinstimmung und dann die Ersetzung. Eine Möglichkeit besteht darin, grepl
und tidyr
Dieser Ansatz sieht zwar nicht so effizient aus, aber es macht es einfach, Zeilen mit mehr oder weniger Übereinstimmungen zu finden.
Nach meinem Verständnis ist die Substitutionsanpassung in pcre2 implementiert, und ich glaube, dass diese Art von Problem direkt in der Regex gelöst werden kann. Leider scheint noch niemand ein pcre2-Paket für R gebaut zu haben.
Vielleicht einer von diesen.
%Vor% Die Basis-R-Methode ist etwas schneller als der veröffentlichte Code für kleine und größere Datensätze. Die purrr
-Methode ist langsamer als der veröffentlichte Code für kleine Datenmengen, aber ungefähr gleich wie die Basis-R-Methode für größere Datenmengen.
Tags und Links string r regex substitution