Я борюсь с регулярным выражением. В своем примере я использую R
, но приветствуется любое совместимое регулярное выражение.
Вот в чем проблема: рассмотрим этот пример:
test <- c("truc/truc/plouf.xlsx","plouf.xlsx","truc/plouf.xlsx")
Я бы хотел, чтобы plouf
извлекался каждый раз.
Я пытался:
library(stringr)
str_extract(test,"(?<=\/{0,1}).+(?=\\.xlsx)")
Что дает мне
[1] "трук/трук/плуф" "плуф" "трук/плуф"
Я наивно думал, что использование ленивого .+?
в str_extract(test,"(?<=\/{0,1}).+?(?=\\.xlsx)")
решит проблему, но это не так.
Как мне поступить?
Чтобы извлечь имя файла терминала (имеющее расширение), у вас все будет в порядке, используя:
library(stringr)
test <- c("truc/truc/plouf.xlsx", "plouf.xlsx", "truc/plouf.xlsx")
files <- str_extract(test, "[^/]+(?=\\.\\w+$)")
files
[1] "plouf" "plouf" "plouf"
Шаблон регулярного выражения здесь говорит о соответствии:
[^/]+
соответствует любому одному или нескольким символам, но не косой черте(?=\\.\\w+$)
пока не посмотрю вперед и не увижу расширение файла (но не совпадающее с ним)