2014-10-20 178 views
2

我是新使用正則表達式。我有以下幾點:正則表達式包含下劃線

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,而不必子集filesgrep(和grepl)的參數fixed將使匹配確切,因爲這不會通過正則表達式引擎常常會使其更快。

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 2014-10-20 19:30:33

相關問題