Я пытаюсь извлечь кучу информации из имен файлов, используя регулярные выражения в R. Поскольку я сопоставляю шаблон, str_view () показывает мне правильный набор строк. Тем не менее, когда я пытаюсь заменить их и извлечь оставшуюся часть, это не работает. Я также пробовал str_extract (), но он не работает. Что я делаю неправильно?

fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"

fext <- tools::file_path_sans_ext(fname)

stringr::str_view(fext, ".*-ASG_\\d+_", match = TRUE)

P_num <- gsub(".*-ASG_\\d{2}_", "", fext)

P_num <- stringr::str_extract(fname, "(?<=-ASG_\\d+)([^_])*(?=\\.tab)")
0
rottweiller 9 Окт 2021 в 09:58

2 ответа

Лучший ответ

Вот простой подход с использованием sub:

fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"
output <- sub("^.*-ASG_\\d+_(.*)\\.tab$", "\\1", fname)
output

[1] "00020"

Выше мы использовали группу захвата, чтобы изолировать часть имени файла без расширения, которую вы хотите сопоставить.

0
Tim Biegeleisen 9 Окт 2021 в 07:04

Использование trimws из base R

 trimws(fname, whitespace = ".*_|\\..*")
[1] "00020"

Данные

fname <- "TC2L6C_2020-08-14_1516_6C-ASG_29_00020.tab"
0
akrun 9 Окт 2021 в 16:18