TL; DR;
Вы не можете сделать это с помощью одного вызова str_extract
, поскольку вы не можете сопоставить отдельные фрагменты текста в одной операции сопоставления .
Опять же, невозможно сопоставить тексты, разделенные другим текстом, в одну группу .
Обходы / Решения
Существует дварешения:
- Захватывайте нужные вам части текста и затем соединяйте их (2 операции:
match
+ join
) - Захватите нужные вам части текста и замените их обратными ссылками на необходимые группы (1
replace
* 1035)* операция)
Захват групп хранит только части текста, которые вы сопоставляете, в отдельных буферах памяти, но вам также нужен метод или функция, способнаядоступ к этим кускам.
Здесь, в R, str_extract
отбрасывает их, но str_match
сохраняет их в результате.
s <- "AIR-GEN-SUM-UD-ELA-NH-COMBINED-3-SEG1"
m <- str_match(s, ":?(ELA).*-(\\d+)")
paste0(m[,2], "-", m[,3])
Это печатает ELA-3
.См. R demo online .
Другой способ - заменить во время захвата детали, которые необходимо сохранить, а затем использовать обратные ссылки на эти детали в шаблоне замены:
x <- "AIR-GEN-SUM-UD-ELA-NH-COMBINED-3-SEG1"
sub("^.*-ELA.*?-([^-]+)-[^-]+$", "ELA-\\1", x)
См. эту демонстрационную версию R