Вы можете использовать
xx <- "gee(formula = breaks ~ tension, id = wool, data = warpbreaks)"
sub(".*\\bid\\s*=\\s*(\\w+).*", "\\1", xx)
## or, if the value extracted may contain any chars but commas
sub(".*\\bid\\s*=\\s*([^,]+).*", "\\1", xx)
См. Демо R и демо regex .
Подробности
.*
- любые 0+ символов, как можно больше \\bid
- целое слово id
(\b
- граница слова) \\s*=\\s*
- =
, заключенный в 0+ пробелов (\\w+)
- Группа захвата 1 (\\1
в шаблоне замены относится к этому значению): одна или несколько букв, цифр или подчеркиваний(или [^,]+
соответствует 1 + символам, отличным от запятой) .*
- остаток строки.
Другие альтернативные решения:
> xx <- "gee(formula = breaks ~ tension, id = wool, data = warpbreaks)"
> regmatches(xx, regexpr("\\bid\\s*=\\s*\\K[^,]+", xx, perl=TRUE))
[1] "wool"
Шаблон соответствует id
, =
, заключенному в 0+ пробелов, затем \K
пропускает сопоставленный текст и только 1+ символов, отличных от ,
, попадают в значение совпадения.
Или,подход захвата с stringr::str_match
также действителен здесь:
> library(stringr)
> str_match(xx, "\\bid\\s*=\\s*([^,]+)")[,2]
[1] "wool"