当前位置: 首页 > 知识库问答 >
问题:

R正则表达式匹配-至少1个小写字母、1个数字,长度为8的无特殊字符[重复]

淳于博
2023-03-14
    null
grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:alpha:]]{8})", x, perl=TRUE)

包含情况的示例为:xxxxxxx8,1234567x,AB12EF78

排除情况的示例为:X!3D5F78,x23456789,AB123456

共有1个答案

糜宜民
2023-03-14

你已经非常接近了,你有了正确的关键概念(主要是向前看)。您可以使用以下内容:

grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:lower:][:digit:]]{8})", x, perl=TRUE)

就我个人而言,我觉得使用命名字符类的可读性并不高,所以我会这样写:

grepl("^(?=.*[a-z])(?=.*\\d)[a-z\\d]{8}$", x, perl=TRUE)

我还删除了外部的括号(不是必需的),并锚定了开头和结尾。

x <- c("xxxxxxx8", "1234567x", "ab12ef78", "x!3d5f78", "x23456789", "Ab123456")

grepl("^(?=.*[a-z])(?=.*\\d)[a-z\\d]{8}$", x, perl=TRUE)
# [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE
 类似资料: