Выберите строки, которые не содержат определенного шаблона r regex

У меня есть группа файлов, из которых я хочу выбрать те, которые не содержат терминов «набор данных» или «эфф».

ДАННЫЕ

k <- c("Duct1/X SN5 F9MH.csv", "Duct1/X SN5 F9MH_dataset.csv", "Duct1/X SN5 F9MH_eff.csv", 
"Duct2/X F7 X300 E10.csv", "Duct2/X F7 X300 E10_dataset.csv", 
"Duct2/X F7 X300 E10_eff.csv", "Duct3/X600 F8 X600 E10.csv", 
"Duct3/X600 F8 X600 E10_dataset.csv", "Duct3/X600 F8 X600 E10_eff.csv", 
"Duct4/X F7 X600 E10.csv", "Duct4/X F7 X600 E10_dataset.csv", 
"Duct4/X F7 X600 E10_eff.csv")

КОД

Насколько я понял, я могу использовать [^...] для исключения определенных символов (обозначенных ...) из результатов.

Пробуем это для N:

# Looking for N works 
> grep('.*[N].*', k, value = T)
[1] "Duct1/X SN5 F9MH.csv"         "Duct1/X SN5 F9MH_dataset.csv" "Duct1/X SN5 F9MH_eff.csv"    

# Looking for strings not containing N does not work 
> grep('.*[!N].*', k, value = T)
[1] "Duct1/X SN5 F9MH.csv"         "Duct1/X SN5 F9MH_dataset.csv" "Duct1/X SN5 F9MH_eff.csv"    

# Trying with ^ also does not work 
> grep('.*[^N].*', k, value = T)
 [1] "Duct1/X SN5 F9MH.csv"               "Duct1/X SN5 F9MH_dataset.csv"       "Duct1/X SN5 F9MH_eff.csv"          
 [4] "Duct2/X F7 X300 E10.csv"            "Duct2/X F7 X300 E10_dataset.csv"    "Duct2/X F7 X300 E10_eff.csv"       
 [7] "Duct3/X600 F8 X600 E10.csv"         "Duct3/X600 F8 X600 E10_dataset.csv" "Duct3/X600 F8 X600 E10_eff.csv"    
[10] "Duct4/X F7 X600 E10.csv"            "Duct4/X F7 X600 E10_dataset.csv"    "Duct4/X F7 X600 E10_eff.csv" 

Я могу получить результаты с grepl и использовать его для подмножества вектора символов:

> k[!grepl(pattern = 'N', x = k)]
[1] "Duct2/X F7 X300 E10.csv"            "Duct2/X F7 X300 E10_dataset.csv"    "Duct2/X F7 X300 E10_eff.csv"       
[4] "Duct3/X600 F8 X600 E10.csv"         "Duct3/X600 F8 X600 E10_dataset.csv" "Duct3/X600 F8 X600 E10_eff.csv"    
[7] "Duct4/X F7 X600 E10.csv"            "Duct4/X F7 X600 E10_dataset.csv"    "Duct4/X F7 X600 E10_eff.csv" 

Для моего фактического использования (dataset|eff):

> k[!grepl(pattern = 'eff|dataset', x = k)]
[1] "Duct1/X SN5 F9MH.csv"       "Duct2/X F7 X300 E10.csv"    "Duct3/X600 F8 X600 E10.csv"
[4] "Duct4/X F7 X600 E10.csv"   

но я ищу подход с использованием grep(... , value = T), потому что я не хочу хранить вектор символов (k) - это результат другой функции.

0
0
368
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
grep('N',k,value = T,invert = T)
[1] "Duct2/X F7 X300 E10.csv"           
[2] "Duct2/X F7 X300 E10_dataset.csv"   
[3] "Duct2/X F7 X300 E10_eff.csv"       
[4] "Duct3/X600 F8 X600 E10.csv"        
[5] "Duct3/X600 F8 X600 E10_dataset.csv"
[6] "Duct3/X600 F8 X600 E10_eff.csv"    
[7] "Duct4/X F7 X600 E10.csv"           
[8] "Duct4/X F7 X600 E10_dataset.csv"   
[9] "Duct4/X F7 X600 E10_eff.csv"

поэтому в вашем случае вы можете:

grep('eff|dataset', k, invert = TRUE, value = TRUE)

Другие вопросы по теме