正则表达式包含下划线

问题描述:

我是新使用正则表达式。我有以下几点:正则表达式包含下划线

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) 

但它返回所有文件。任何援助将不胜感激。

您可以简单地删除*量词。问题是这个量子意味着“零个或多个”时间,并且在所有向量元素中匹配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" 

您也可以使用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