Регулярное выражение для извлечения строки из csv перед числами

#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/

Или сопоставьте все до последнего символа подчеркивания. Для этого вам понадобится полное совпадение.

 .*_
 

https://regex101.com/r/4GFPIA/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 :