R 正则表达式以美元符号失败

R 正则表达式以美元符号失败,r,regex,grepl,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", "1

在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)
为什么美元符号会失效?我对第二次grepl的预期结果是:

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

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

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

对不起,输入错误,给你。应该是
[.tif]+$
?或者只是
\.tif$
?“^[0-9\]+\.tif$”起作用(需要双重反冲),但我仍然不明白为什么[.tif]$失败。
[.tif]
意味着“任何字符
t
I
,或者
f
”这不是你想要表达的意思。
grepl("^[0-9_]+[.tif]$", "1234t")
# [1] TRUE
grepl("^[0-9_]+[.tif]$", "1234tt")
# [1] FALSE