Как извлечь из строки с помощью регулярного выражения, слова и или условия - PullRequest
2 голосов
/ 13 февраля 2020

Я хотел бы извлечь слово из строки, но не знаю, как продолжить:

Скажем, у меня есть следующие строки символов:

a_toto_matthew
a_tutu_matthew

В обоих случаях, Я хотел бы извлечь Мэтью

Я пытался

gsub("^a_[toto|tutu]_(.*)$", "\\1", "a_toto_matthew")

Но это не работает. Я мог бы сделать:

gsub("^a_.*_(.*)$", "\\1", "a_toto_matthew")

Но я нахожу это менее изящным. Я хотел бы знать синтаксис для упоминания "toto" или "tutu" в регулярном выражении

Заранее благодарен за любое руководство,

Матье

Ответы [ 3 ]

2 голосов
/ 13 февраля 2020

Другим вариантом может быть использование группы захвата, совпадающей с u или o и обратной ссылкой, и для слова использовать \w+ или совпадать с любым словом char, кроме подчеркивания.

^a_t([uo])t\1_([^\W_]+)$

Regex demo

В группе замены используйте 2

1 голос
/ 13 февраля 2020

Использование stringr с положительным внешним видом

x <- c("a_toto_matthew", "a_tutu_matthew")
stringr::str_extract(x, "(?<=(toto|tutu)_)\\w+")
#[1] "matthew" "matthew"

Или использование группы без захвата в str_match

stringr::str_match(x, "(?:toto|tutu)_(\\w+)")[,2]
1 голос
/ 13 февраля 2020

Попробуйте

gsub('a_(toto|tutu)_(.*)', '\\2', x)
#[1] "matthew" "matthew"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...