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

时间:2019-10-08 09:39:29

标签: r rstudio grepl

我的理解是,以下两个grepl regex语句都应在给定的数值中搜索0到9之间的4位数字。

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

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

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

1 个答案:

答案 0 :(得分:3)

接下来的两个grepl调用发生了什么事,就是R正在使用as.character对您的数字输入进行隐式转换。因此,以下两个调用与此相同:

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
相关问题