为什么这个正则表达式返回 false?

why is this regex expression returning false?

我的理解是以下两个 grepl 正则表达式语句都应该在给定数值中搜索 0-9 的 4 位数字。

我想弄清楚为什么第一个 grepl return 是 TRUE 而第二个 return 是 FALSE。数字之间的唯一区别是我在第二个数字上添加了一个额外的零。我以为他们都会 return TRUE。

grepl("\d{4}", 999900000)

grepl("\d{4}", 9999000000)

以下两个 grepl 调用发生的情况是,R 正在使用 as.character 将您的 numeric 输入隐式转换为字符。因此,以下两个调用与此相同:

grepl("\d{4}", as.character(999900000))
grepl("\d{4}", as.character(9999000000))

变成:

grepl("\d{4}", "999900000")
grepl("\d{4}", "9.999e+09")

你可以清楚地看到,第二个数字在转换为字符串后实际上并不是四位数字。为避免这种情况,请始终对实际 text 使用正则表达式。在这种情况下,使用:

grepl("\d{4}", "999900000")
[1] TRUE
grepl("\d{4}", "9999000000")
[1] TRUE