Вы можете использовать
str_extract(x, "(?<=\\|)[^|]+(?=\\|[^|]+$)")
regmatches(x, regexpr("(?<=\\|)[^|]+(?=\\|[^|]+$)", x, perl=TRUE))
sub(".*\\|([^|]+)\\|[^|]+$", "\\1", x)
См. Демо regex (str_match
/ regmatches
) и другое демо (sub
).
Подробности
(?<=\\|)
- обеспечивает наличие символа |
непосредственно слева от текущего местоположения [^|]+
- один или несколько символов, отличных от |
(?=\\|[^|]+$)
- непосредственно справа от текущего местоположения, должен быть символ |
, затем любые 0+ символов, кроме |
изатем конец строки.
R:
library(stringr)
x <- "abc|def|ghi|jkl"
str_extract(x, "(?<=\\|)[^|]+(?=\\|[^|]+$)")
## => [1] "ghi"
regmatches(x, regexpr("(?<=\\|)[^|]+(?=\\|[^|]+$)", x, perl=TRUE))
## => [1] "ghi"
sub(".*\\|([^|]+)\\|[^|]+$", "\\1", x)
## => [1] "ghi"