Получение только соответствующей части строки в R - PullRequest
3 голосов
/ 27 декабря 2010

Есть ли в R функция, которая соответствует регулярному выражению и возвращает только совпадающие части?Что-то вроде grep -o, поэтому:

> ogrep('.b.',c('abc','1b2b3b4'))
[[1]]
[1] abc

[[2]]
[1] 1b2 3b4

Ответы [ 4 ]

8 голосов
/ 28 декабря 2010

Попробуйте stringr:

library(stringr)
str_extract_all(c('abc','1b2b3b4'), '.b.')
# [[1]]
# [1] "abc"
# 
# [[2]]
# [1] "1b2" "3b4"
6 голосов
/ 27 декабря 2010

Вам, вероятно, следует дать Габору Гротендику чек на написание пакета gsubfn:

 require(gsubfn)
#Loading required package: gsubfn
 strapply(c('abc','1b2b3b4'), ".b.", I)

#Loading required package: tcltk
#Loading Tcl/Tk interface ... done
[[1]]
[1] "abc"

[[2]]
[1] "1b2" "3b4"

Это только применяет функцию тождества I к совпадениям шаблона.

5 голосов
/ 24 июля 2013

Не могу поверить, что никто никогда не упоминал regmatches!

x <- c('abc','1b2b3b4')
regmatches(x, gregexpr('.b.', x))

# [[1]]
# [1] "abc"

# [[2]]
# [1] "1b2" "3b4"

Меня удивляет, не существовало ли regmatches два с половиной года назад?

5 голосов
/ 27 декабря 2010

Вам нужно объединить gregexpr с подстрокой, я считаю:

> s = c('abc','1b2b3b4')
> m = gregexpr('.b.',s)
> substring(s[1],m[[1]],m[[1]]+attr(m[[1]],'match.length')-1)
[1] "abc"
> substring(s[2],m[[2]],m[[2]]+attr(m[[2]],'match.length')-1)
[1] "1b2" "3b4"

Возвращенный список «m» содержит начало и длину совпадений. Обведите s, чтобы получить все подстроки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...