Ersetzt Übereinstimmungen gemäß dem Muster, das übereinstimmte

9

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 .

%Vor%

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 .:

%Vor%

, 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:

%Vor%

Um type neu anzuordnen, damit das Muster, das let_let entspricht, zuerst das Problem löst, macht es mich nervös.

%Vor%     
jbaums 09.01.2016, 01:49
quelle

2 Antworten

1

Zeichenkette

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

%Vor%

grepl und tidyr

Ein anderer Ansatz ist zuerst die Übereinstimmung und dann die Ersetzung. Eine Möglichkeit besteht darin, grepl und tidyr

zu verwenden %Vor%

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.

    
NGaffney 10.01.2016, 05:50
quelle
2

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.

    
WaltS 09.01.2016 23:27
quelle

Tags und Links