R REGEX Match - at least 1 lowercase letter, 1 number, and no special characters at 8 length
本问题已经有最佳答案,请猛点这里访问。
我试图在r中创建一个grepl regex来匹配以下字符串:
然而,到目前为止,我的尝试并没有带来任何运气:
1 | grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:alpha:]]{8})", x, perl=TRUE) |
知道我哪里出错了吗?
纳入病例的例子有:
排除案例的例子有:
你非常接近,你有正确的关键概念(主要是向前看)。你可以用这个:
1 | grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:lower:][:digit:]]{8})", x, perl=TRUE) |
就个人而言,我觉得使用命名字符类的可读性不强,所以我会这样写:
1 | grepl("^(?=.*[a-z])(?=.*\\d)[a-z\\d]{8}$", x, perl=TRUE) |
我还移除了外部的部分(不需要),并锚定了开始和结束部分。
以下是示例输入的结果:
1 2 3 4 | 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 |
您还可以通过分解测试来管理非常简单的regex:
1 2 3 4 5 6 | grepl("[a-z]", x) & # Contain 1 or more lowercase letters grepl("\\d", x) & # Contain 1 or more numbers !grepl("[A-Z]|\\s|\\p{P}|\\p{S}", x, perl = TRUE) & # no upper, space, punctuation nor special char. nchar(x) == 8L # is 8 characters [1] TRUE TRUE TRUE FALSE FALSE FALSE |