Вы можете использовать
sub("^[^:]*: ([^:]*).*", "\\1", attribute)
См. Демонстрационную версию regex
Вам нужно полагаться на классы отрицательных символов, [^:]
, которые соответствуют любому символу, кроме :
, поскольку .*
соответствует жадно любым 0 или более символам.Кроме того, ваш шаблон содержит пробел перед :
и отсутствует в строке.
Подробно
^
- начало строки [^:]*
- любые 0+ символов, кроме :
:
- двоеточие с пробелом - ([^:]*)
- Захват группы 1 (\1
относится к этому значению):любые 0+ символов кроме :
.*
- остаток строки.
R Демо :
attribute <- "S4Q7b1_t1_r1: SUBSTRING: some explanation: some explanation - ..."
sub("^[^:]*: ([^:]*).*", "\\1", attribute)
## => [1] "SUBSTRING"