Исправить регулярное выражение в R (библиотека stringr) - PullRequest
0 голосов
/ 07 марта 2020

Так что я довольно хорошо разбираюсь в регулярных выражениях, но я впервые использую его в R (строго используя библиотеку stringr). У меня есть следующая строка, где я хочу, чтобы совпадать только для «синий» «красный» и / или «зеленый». Я также хочу отдельную группу соответствия для каждого. Когда я использую это регулярное выражение для одной и той же тестовой строки в Rubular (онлайн-редактор ruby regex), он работает именно так, как я хочу, но когда я делаю это в R, он генерирует две подходящие группы, каждая из которых предназначена для синего (хотя синий появляется только один раз в тестовой строке). Что я делаю не так и как я могу это исправить, не используя другую библиотеку?

Код:

library(stringr)

text="I like blue red and green"
reg<-"(blue|red|green)"

str_match(text,reg)

Вывод:

 [,1]   [,2]  
 [1,] "blue" "blue"

1 Ответ

0 голосов
/ 07 марта 2020

Мне не ясно, как вы хотите или ожидаете структурировать вывод, но вот подход, который возвращает вам именованный вектор с элементами, которые появляются в строке (или NA, если элемент не появляется в строка). Он использует sapply от базы R, поэтому никаких дополнительных пакетов не требуется.

> sapply(c("blue", "red", "green"), function(color) stringr::str_extract(text, color))
   blue     red   green 
 "blue"   "red" "green"  
...