我正在尝试在R中创建一个grepl正则表达式,以匹配以下字符串:
但是,到目前为止,我的尝试并没有带来任何运气:
grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:alpha:]]{8})", x, perl=TRUE)
有什么想法我要去哪里吗?
包含案例的示例为:xxxxxxx8, 1234567x, ab12ef78
排除案例的示例为:x!3d5f78, x23456789, Ab123456
答案 0 :(得分:4)
您非常接近,您掌握了正确的关键概念(主要是前瞻性)。您可以使用:
urlpatterns = [
path('users/<int:pk>/follow/<int:target_id>/', UserViewSet.as_view({"post": "follow"}))
]
就个人而言,我发现使用命名字符类的可读性更高,因此我将其编写为:
grepl("((?=.*[[:lower:]])(?=.*[[:digit:]])[[:lower:][:digit:]]{8})", x, perl=TRUE)
我还移除了外部括号(不必要),并固定了开头和结尾。
以下是您的示例输入的结果:
grepl("^(?=.*[a-z])(?=.*\\d)[a-z\\d]{8}$", x, perl=TRUE)
答案 1 :(得分:1)
您还可以通过分解测试来使用非常简单的正则表达式进行管理:
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