Использование str_match
(или str_match_all
)
Так как вы хотите, чтобы извлечь захвата группы, вы можете использовать str_match
(или str_match_all
). str_extract
только выдержки всего совпадения.
От R stringr
help:
str_match
Extract соответствует группе из строки.
и
str_extract
извлечь полный матч
R Код:
library(stringr)
test=" 2 15 3 23 12 0 0.18"
pattern="^ *(\\d+) +"
f=str_match(test,pattern)
f[[2]]
## [1] "2"
f[[2]]
будет выводить второй элемент, который является первым захват группа стоимость.
Использование regmatches
Как упоминается в comment above, также возможно с regmatches
и regexec
:
test=" 2 15 3 23 12 0 0.18"
pattern="^ *(\\d+) +"
res <- regmatches(test,regexec(pattern,test))
res[[1]][2] // The res list contains all matches and submatches
## [1] "2" // We get the item[2] from the first match to get "2"
См regexec
help page, который говорит:
regexec
возвращает список такая же длина, как текст, каждый элемент которого равен -1
, если нет совпадения, или последовательность целых чисел с начальными позициями совпадения и все подстроки, соответствующие подвыражениям в скобках шаблона, с атрибутом «match.length» вектор, дающий длину совпадений (или -1
для не совпадает).
OP задача конкретное решение
На самом деле, так как вы заинтересованы только в 1 целое число в начале строки, вы можете добиться того, что вы хотите с простым gsub
:
> gsub("^ *(\\d+) +.*", "\\1", test)
[1] "2"
Пожалуй , вам нужно 'str_match_all'. –
Если вы используете 'f = str_match (test, pattern)', 'f [[2]]' будет содержать '2' –
@stribizhev Да, это работает, спасибо.Итак, 'str_extract()' и 'regmatches()' просто не поддерживают группы захвата? – ephemeris