[英]Regex pattern to find all strings which contain at most 3 alphanumeric characters
我是正则表达式和 python 中的re
模块的新手。 我想形成一个正则表达式模式,它有助于识别最多包含三个字母数字字符的所有字符串。 我想找到的一些示例模式是:
gut
ok
aa
na
N/A
x
c
Nil
wu
No.
E
A
I
k k
H
o
K
N
Y
Top
OK了
m
| yes
N/A |
t | T
t | T
| idk
| wsq
t | T
b | n
我准备了一个正则表达式模式^[^a-zA-Z\d]*([^\n]){0,3}[^a-zA-Z\d]*$
但如果我们有一个特殊的2 个字母数字字符之间的字符。
有人可以帮忙吗?
您可以将任何字符重复 1-3 次,除了字符 az 或数字后跟单个字符 az 0-9。
如果您不想跨越换行符,可以将它们添加到否定字符 class。
^[^a-zA-Z\d\r\n]*(?:[a-zA-Z\d][^a-zA-Z\d\r\n]*){1,3}$
^
字符串开头[^a-zA-Z\d\r\n]*
可选择重复匹配除 az、数字或换行符之外的任何字符(?:
非捕获组作为一个整体重复
[a-zA-Z\d]
匹配单个字符 az 或数字[^a-zA-Z\d\r\n]*
可选择重复匹配除 az、数字或换行符之外的任何字符){1,3}
关闭组并重复 1-3 次$
字符串结尾或者使用 inline 修饰符进行不区分大小写的匹配更短:
(?i)^[^a-z\d\r\n]*(?:[a-z\d][^a-z\d\r\n]*){1,3}$
我假设最多在 3 个 alpha 字符旁边,您至少需要一个。 在这种情况下,您可能想尝试:
(?i)^(?!(?:.*[a-z]){4})(?:.*[a-z].*){1,3}$
查看在线演示
(?i)
- 匹配余数不区分大小写的内联修饰符。^
- 起始线锚。(??(:..*[az]){4})
- 负前瞻与 (4x) 嵌套非捕获组匹配除换行符 0+ 次和 alpha 字符以外的任何字符。(?:.*[az].*){1,3}
- 非捕获组 (1-3x) 以匹配除换行符之外的 0+ 个字符、一个 alpha 字符,以及除换行符之外的 0+ 个字符。$
- 结束线锚。 如果您准备采用其他方式,您还可以使用re.findall()
并计算找到的匹配项:
import re
s = 'N/A'
cnt = len(re.findall(r'[A-Za-z]', s))
if cnt > 0 and cnt < 4:
print('Valid')
else:
print('Invalid')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.