【发布时间】:2019-10-08 09:39:29
【问题描述】:
我的理解是以下两个 grepl 正则表达式语句都应该在给定的数值中搜索 0-9 的 4 位数字。
我试图弄清楚为什么第一个 grepl 返回 TRUE 而第二个返回 FALSE。数字之间的唯一区别是我在第二个数字上添加了一个额外的零。我以为他们都会返回 TRUE。
grepl("\\d{4}", 999900000)
grepl("\\d{4}", 9999000000)
【问题讨论】:
我的理解是以下两个 grepl 正则表达式语句都应该在给定的数值中搜索 0-9 的 4 位数字。
我试图弄清楚为什么第一个 grepl 返回 TRUE 而第二个返回 FALSE。数字之间的唯一区别是我在第二个数字上添加了一个额外的零。我以为他们都会返回 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
【讨论】: