繁体   English   中英

正则表达式模式查找最多包含 3 个字母数字字符的所有字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM