#r #regex #csv
#r #регулярное выражение #csv
Вопрос:
Я очень новичок в мире регулярных выражений и хотел бы знать, как извлекать строки с помощью регулярных выражений из множества имен файлов, которые я импортировал в R. Мои файлы соответствуют общему формату:
testing1_010000.csv
check3_012000.csv
testing_checking_045880.csv
test_check2_350000.csv
И я хотел бы извлечь все перед частью 6 numbers.csv, включая «_», чтобы получить что-то вроде:
testing1_
check3_
testing_checking_
test_check2_
Если это поможет, шаблон, который я, по сути, хочу удалить, всегда будет состоять из 6 чисел, за которыми сразу следует .csv.
Любая помощь была бы отличной, спасибо!
Комментарии:
1. Добро пожаловать в «мир регулярных выражений»!
2. Если вы всегда удаляете 6 чисел, за которыми следует «.csv», почему бы просто не удалить последние 10 символов?
3. онлайн генераторы регулярных выражений могут быть очень полезны regex-generator.olafneumann.org
Ответ №1:
Есть несколько способов, которыми вы могли бы это сделать. Например, сопоставьте что-либо перед строкой из шести цифр, за которой следует «.csv». Для этого вы хотели бы получить первую группу захвата.
/(.*)d{6}.csv/
https://regex101.com/r/MPH6mE/1/
Или сопоставьте все до последнего символа подчеркивания. Для этого вам понадобится полное совпадение.
.*_
Комментарии:
1. Это фантастика, большое вам спасибо! В итоге я сохранил его простым и придерживался.*_ который отлично работал с тем, как я использовал это с
str_extract
функцией R.
Ответ №2:
Files = c("testing1_010000.csv", "check3_012000.csv",
"testing_checking_045880.csv", "test_check2_350000.csv")
sub("(.*_)[[:digit:]]{6}.*", "\1", Files)
[1] "testing1_" "check3_" "testing_checking_"
[4] "test_check2_"
Ответ №3:
Мы можем использовать stringr::str_match()
. Он также будет работать для разных шести цифр.
library(tidyverse)
files <- c("testing1_010000.csv", "check3_012000.csv", "testing_checking_045880.csv", "test_check2_350000.csv")
str_match(files, '(.*_)\d \.csv
Регулярное выражение можно интерпретировать как:
"записывайте все до и включая символ подчеркивания, за которым затем следует одна или несколько цифр .csv в качестве окончания"
Создано 2021-12-03 пакетом reprex (v2.0.1)
Ответ №4:
Использование nchar
:
Files = c("testing1_010000.csv", "check3_012000.csv",
"testing_checking_045880.csv", "test_check2_350000.csv")
substr(Files, 1, nchar(Files)-10)
OR
library(stringr)
str_remove(Files, "\d{6}.csv")
[1] "testing1_" "check3_" "testing_checking_"
[4] "test_check2_"
)[, 2]
#> [1] "testing1_" "check3_" "testing_checking_"
#> [4] "test_check2_"
Регулярное выражение можно интерпретировать как:
«записывайте все до и включая символ подчеркивания, за которым затем следует одна или несколько цифр .csv в качестве окончания»
Создано 2021-12-03 пакетом reprex (v2.0.1)
Ответ №4:
Использование nchar
: