为什么这个正则表达式返回 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
我的理解是以下两个 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