In ?agrep
( grep
mit Fuzzy-Matching) wird erwähnt, dass ich das Argument fixed=FALSE
setzen kann, um mein Muster als regulären Ausdruck interpretieren zu lassen.
Aber ich kann es nicht zum Laufen bringen!
%Vor%Der obige sollte mit dem regulären Ausdruck übereinstimmen "(asdf | fdsa)" genau stimmt in diesem Fall mit der Testzeichenfolge "asdf" überein.
Zur Bestätigung:
%Vor% Und noch verwirrender ist, dass adist
den Abstand zwischen dem Muster und der Zeichenfolge korrekt als 0 angibt, was bedeutet, dass agrep
definitiv 1 anstatt integer(0)
zurückgeben sollte (es gibt keine Möglichkeit, dass 0 ist größer als der Standardwert max.dist = 0.1
).
Warum funktioniert das nicht? Gibt es etwas, das ich nicht verstehe? Eine Problemumgehung?
Ich bin froh, adist
verwenden zu können, bin mir aber nicht ganz sicher, wie man den agrep
-Parameter von max.distance=0.1
in den entsprechenden Parameter von adist
umwandelt.
(Ja, ich bin auf einem alten Computer festgefahren, der nicht besser ist als R 2.15.2)
%Vor% tl; dr: agrep(..., fixed=F)
scheint nicht mit dem '|' Charakter. Verwende aregexec
.
Bei weiteren Untersuchungen denke ich, dass dies ein Fehler ist und dass agrep(..., fixed=F)
nicht mit '|' Regexes (obwohl adist(..., fixed=F)
tut).
Um dies näher auszuführen, beachte das
%Vor% Wenn 'asdf' agrep
'd zu nicht-regulärem Ausdruck String' (asdf | fdsa) 'wäre, dann hätte es den Abstand 7.
In diesem Sinne:
%Vor% Das sind die Ergebnisse, die ich erwarten würde, wenn fixed=T
. Wenn fixed=F
, meine Regex würde 'asdf' genau und die Entfernung wäre 0, so würde ich immer ein Ergebnis von '1' wieder von agrep
bekommen.
Es sieht also so aus, dass agrep(pattern, x, fixed=F)
nicht funktioniert , d. h. es berücksichtigt fixed
als TRUE für diese Art von Mustern.
Wie @Arun erwähnt, könnte es nur '|' Regexes, die nicht funktionieren. Beispiel: agrep('la[sb]y', 'lazy', fixed=FALSE)
funktioniert wie erwartet.
Die Funktion aregexec
scheint zu funktionieren.
Tags und Links r