2014-10-20 4 views
2

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

files = c("apple_2014_10_17.csv", 
      "apple_2014_10_18.csv", 
      "applepie_2014_10_17.csv", 
      "applepie_2014_10_18.csv") 

Ищу вернуться только:

apple_2014_10_17.csv 
apple_2014_10_18.csv 

и НЕ возврата:

applepie_2014_10_17.csv 
applepie_2014_10_18.csv 

Я использую следующий регулярное выражение

grepl("apple_*", files) 

Но он возвращает все файлы. Будем очень благодарны любой помощи.

ответ

4

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

files[grepl('apple_', files)] 
# [1] "apple_2014_10_17.csv" "apple_2014_10_18.csv" 

Или вы могли бы сохранить квантор и просто поместите точку . перед ним. Таким образом, apple_ сопоставляется буквально, а затем предыдущий токен (.любой символ) вместо этого сопоставляется «ноль или больше».

files[grepl('apple_.*', files)] 
# [1] "apple_2014_10_17.csv" "apple_2014_10_18.csv" 
1

Вы также можете использовать value аргумент в grep и не должны подмножества files. Аргумент fixedgrepgrepl) сделает точное совпадение, и поскольку это не проходит через механизм регулярных выражений, часто время будет быстрее.

grep("apple_", files, value = TRUE, fixed = TRUE) 
# [1] "apple_2014_10_17.csv" "apple_2014_10_18.csv" 

Или проще было бы использовать в invert аргумент и искать «пирога», возвращая противоположные матчи.

grep("pie", files, value = TRUE, invert = TRUE) 
# [1] "apple_2014_10_17.csv" "apple_2014_10_18.csv" 

Обратите внимание, что если вы ищете для файлов в каталоге, вы можете также попробовать

list.files(pattern = "apple_") 
+0

+1 для альтернативного пути. – hwnd

 Смежные вопросы

  • Нет связанных вопросов^_^