正则表达式包含下划线
问题描述:
我是新使用正则表达式。我有以下几点:正则表达式包含下划线
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
,而不必子集files
。 grep
(和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_")
+1的另一种方式。 – hwnd 2014-10-20 19:30:33