Gegeben ein regulärer Ausdruck, der capture groups (Klammern) und einen String enthält, wie kann ich alle die Teilstrings erhalten, die die Capture-Gruppen entsprechen, dh die Teilstrings, die normalerweise von "\ 1" referenziert werden. \ 2 "?Entnehmen Sie Capture-Gruppenübereinstimmungen aus regulären Ausdrücken? (oder: wo ist gregexec?)
Beispiel: Ein regex Capturing Ziffern betrachten von "xy" vorangestellt:
s <- "xy1234wz98xy567"
r <- "xy(\\d+)"
Wunschergebnis:
[1] "1234" "567"
Erster Versuch: gregexpr
:
regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567"
nicht, was ich will weil es die Teilstrings zurückgibt, die dem gesamten Muster entsprechen.
Zweiter Versuch: regexec
:
regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234"
nicht, was ich will, weil es gibt nur das erste Auftreten einer Anpassung für das gesamte Muster und der Capture-Gruppe.
Wenn es eine gregexec
Funktion gab, die regexec
als gregexpr
erweitert erweitert regexpr
, würde mein Problem gelöst werden.
Die Frage ist also: wie alle Teilstrings (oder Indizes, die wie in den obigen Beispielen an regmatches
übergeben werden können) abgerufen werden, passend zu Capture-Gruppen in einem beliebigen regulären Ausdruck?
Hinweis: das oben angegebene Muster für r
ist nur ein dummes Beispiel, es muss willkürlich bleiben.
Dies ist genau das, was ich brauche. Ich werde seine Quelle überprüfen. Ich glaube, es gibt (oder sollte) eine Lösung in der Basis R, da dies eine grundlegende Aufgabe ist. –
Es verwendet nur 'lapply' und' regexec' (wenn auch geschickt) ... Geben Sie einfach 'str_match_all' und' str_match' ein, um das zu sehen ... – Arun