正则表达式包括下划线

时间:2014-10-20 19:03:48

标签: regex r grepl

我很想使用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)

但它会返回所有文件。非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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 :(得分:1)

您还可以使用value中的grep参数,而不必使用files的子集。 fixed {和grep的{​​{1}}参数将使匹配完全匹配,因为这不会通过正则表达式引擎,所以通常会使其更快。

grepl

或者更容易使用grep("apple_", files, value = TRUE, fixed = TRUE) # [1] "apple_2014_10_17.csv" "apple_2014_10_18.csv" 参数并搜索" pie",返回相反的匹配。

invert

请注意,如果您要在目录中搜索文件,也可以尝试

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