正则表达式因美元符号而失败
regex fails with dollar sign
在 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)
那个returns:
[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
失败的不是$
,而是括号的使用。相反,你想要
grepl("^[0-9_]+\.tif$", allfiles)
# [1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
同时,^[0-9_]+[.tif]$
表示在所有数字 and/or _ 之后,最后只有 t、i、f 或 。也就是说,只有其中之一。例如,
grepl("^[0-9_]+[.tif]$", "1234t")
# [1] TRUE
grepl("^[0-9_]+[.tif]$", "1234tt")
# [1] FALSE
在 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)
那个returns:
[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
失败的不是$
,而是括号的使用。相反,你想要
grepl("^[0-9_]+\.tif$", allfiles)
# [1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
同时,^[0-9_]+[.tif]$
表示在所有数字 and/or _ 之后,最后只有 t、i、f 或 。也就是说,只有其中之一。例如,
grepl("^[0-9_]+[.tif]$", "1234t")
# [1] TRUE
grepl("^[0-9_]+[.tif]$", "1234tt")
# [1] FALSE