我想要匹配的数字是重复的N次,但只有唯一的数字。我对正则表达式解决方案感兴趣。
vec <- c("00", "01", "02", "06", "07", "65", "87", "88", "66", "777", "999999")
grep("^[6-9]{1,}$", vec, value = TRUE)
#> [1] "87" "88" "66" "777" "999999"所以在这里我只想匹配88,66,777和9999。不应该匹配87,因为它包含两个不同的数字。
暗示?
发布于 2018-02-15 11:54:18
使用反向引用:
grep("^([6-9])\\1{1,}$", vec, value = TRUE)
[1] "88" "66" "777" "999999"如果您想匹配重复N次的数字,那么{1}应该是N1,因为您已经有了第一个匹配作为捕获组。
发布于 2018-02-15 12:00:18
您可以使用Perl反向引用。
inx <- grep("^([6-9])\\g1", vec, perl = TRUE)
vec[inx]
#[1] "88" "66" "777" "999999"发布于 2018-02-15 12:43:01
当然,一个更复杂的解决方案。但我想尝试另一种使用tidyverse的方法
library(stringr)
library(tidyverse),
vec %>%
str_split("") %>%
keep(function(x) length(unique(x)) == 1 & all(x > 5)) %>%
map_chr(paste0, collapse = "")
[1] "88" "66" "777" "999999"https://stackoverflow.com/questions/48806558
复制相似问题