Извлечь совпадения групп захвата из регулярных выражений? (или: где 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 приведенный выше просто глупый пример, он должен оставаться произвольным.

Ответы на вопрос(3)

Ваш ответ на вопрос