Вы можете использовать подход regmatches
/ regexpr
с регулярным выражением PCRE, которое извлечет 1+ цифр после известных "префиксов":
x <- "CVEGEO=0901500011337<BR>CVE_ENT=09<BR>CVE_MUN=015<BR>CVE_LOC=0001<BR>CVE_AGEB=1337<BR>"
regmatches(x, regexpr("_MUN=\\K\\d+", x, perl=TRUE))
## => [1] "015"
regmatches(x, regexpr("_AGEB=\\K\\d+", x, perl=TRUE))
## => [1] "1337"
См. Демонстрационную версию R online.
Сведения о регулярном выражении
_MUN=
- _MUN
текст \K
- оператор сброса совпадений, который сбрасываеттекст соответствует \d+
- 1+ цифр.
Использование perl=TRUE
крайне важно для работы регулярного выражения.
Эквивалентное использованиеstringr
:
library(stringr)
str_extract(x, "(?<=_MUN=)\\d+")
str_extract(x, "(?<=_AGEB=)\\d+")
Положительный обзор (?<=...)
только проверяет совпадение с шаблоном непосредственно слева от текущего местоположения, но не использует текст, т.е. не помещает его в значение совпадения.
И причудливое решение с stringr::str_match
захватом результатов в один заход в столбцы 2 и 3:
library(stringr)
str_match(x, "_MUN=(\\d+).*_AGEB=(\\d+)")
# [,1] [,2] [,3]
# [1,] "_MUN=015<BR>CVE_LOC=0001<BR>CVE_AGEB=1337" "015" "1337"