我很想使用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)
但它会返回所有文件。非常感谢任何帮助。
答案 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"