正则表达式失败并带有美元符号

时间:2018-12-10 22:24:05

标签: r regex grepl

在R中,我试图从文件名向量中匹配一系列字符串。我只希望那些没有以.tif结尾的字母

allfiles <- c("181129_16_00_class_mlc.tif", "181129_16_00.tif.aux.xml", "181129_17_00_01_19.tif", "181129_17_00_01_20.tif", "181129_17_00_01_23.tif", "181129_17_00_01_24.tif", "181129_17_00_01_25.tif", "181129_17_00_01_26.tif", "181129_17_00_01_27.tif", "181129_17_00_01_28.tif", "181129_17_00_01_29.tif", "181129_17_00_01_30.tif")

 grepl("^[0-9_]+[.tif]", allfiles)
 grepl("^[0-9_]+[.tif]$", allfiles)

返回:

[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

为什么美元符号会失败?我预期第二个grepl的结果是:

[1] FALSE FALSE TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

1 个答案:

答案 0 :(得分:3)

失败不是$,而是括号的使用。相反,您想要

grepl("^[0-9_]+\\.tif$", allfiles)
# [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

同时,^[0-9_]+[.tif]$表示在所有数字和/或_之后,最后只有t,i,f或。也就是说,只有其中之一。例如,

grepl("^[0-9_]+[.tif]$", "1234t")
# [1] TRUE
grepl("^[0-9_]+[.tif]$", "1234tt")
# [1] FALSE