Извлечь совпадения групп захвата из регулярных выражений? (или: где gregexec?)
Дано регулярное выражение, содержащеезахватывать группы (скобки) и строка, как я могу получитьвсе подстроки, соответствующие группам захвата, то есть подстроки, на которые обычно ссылаются "\ 1", "\ 2"?
Пример: рассмотрим число, фиксирующее регулярное выражение, перед которым стоит «xy»:
s <- "xy1234wz98xy567"
r <- "xy(\\d+)"
Желаемый результат:
[1] "1234" "567"
Первая попытка:gregexpr
:
regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567"
Не то, что я хочу, потому что он возвращает подстроки, соответствующие всему шаблону.
Вторая попытка:regexec
:
regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234"
Не то, что я хочу, потому что это возвращаеттолько первое совпадение для всего шаблона и группы захвата.
Если бы былgregexec
функция, расширяющаяregexec
какgregexpr
продолжаетсяregexpr
Моя проблема будет решена.
Таким образом, вопрос заключается в следующем: как извлечь все подстроки (или индексы, которые могут быть переданыregmatches
как в примерах выше) сопоставление групп захвата в произвольном регулярном выражении?
Примечание: шаблон дляr
приведенный выше просто глупый пример, он должен оставаться произвольным.