首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与重复N次的唯一数字匹配的正则表达式

与重复N次的唯一数字匹配的正则表达式
EN

Stack Overflow用户
提问于 2018-02-15 11:49:18
回答 3查看 75关注 0票数 2

我想要匹配的数字是重复的N次,但只有唯一的数字。我对正则表达式解决方案感兴趣。

代码语言:javascript
复制
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"

所以在这里我只想匹配88667779999。不应该匹配87,因为它包含两个不同的数字。

暗示?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-15 11:54:18

使用反向引用:

代码语言:javascript
复制
grep("^([6-9])\\1{1,}$", vec, value = TRUE)
[1] "88"     "66"     "777"    "999999"

如果您想匹配重复N次的数字,那么{1}应该是N1,因为您已经有了第一个匹配作为捕获组。

票数 5
EN

Stack Overflow用户

发布于 2018-02-15 12:00:18

您可以使用Perl反向引用

代码语言:javascript
复制
inx <- grep("^([6-9])\\g1", vec, perl = TRUE)
vec[inx]
#[1] "88"     "66"     "777"    "999999"
票数 1
EN

Stack Overflow用户

发布于 2018-02-15 12:43:01

当然,一个更复杂的解决方案。但我想尝试另一种使用tidyverse的方法

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48806558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档