[英]How to find all the strings with length 5 and have 1 digit and 4 letters divided to all group combinations
我需要正则表达式来计算所有长度为 5 的字符串组,其中包含 1 位数字 ( 0-9
) 和 4 个小写字母 ( az
),如下所示:
1abcd
a2acd
aa3ad
aa5aa
1aabb
我知道如何将所有长度为 5 的字符串与字母和 1 位数字匹配:
^(?=.{5}$)[az]*(?:\\d[az]*){1}$
这是一个例子。
但我不知道如何为上述每个组做这件事。
我读到第一个例子( 1位数字和所有字母都不同)我需要防止重复字符与.*(.).*\\1
但我试过:
^(?=.{5}$)[a-z]*(?:\d[a-z]*)(.*(.).*\1){1}$
它没有用。
您可以使用:
/\b(?=[a-zA-Z]*\d[a-zA-Z]*)([a-zA-Z0-9]{5})/
添加第二个\\b
以拒绝超过 5 个字符的匹配字符串:
/\b(?=[a-zA-Z]*\d[a-zA-Z]*)([a-zA-Z0-9]{5}\b)/
如果您想限制为小写字母:
/\b(?=[a-z]*\d[a-z]*)([a-z0-9]{5}\b)/
由于四个字母的所有组合都是可能的,因此无需进一步分类。 都一样,都不同,有些是一样的。
如果您确实想对字母进行分类,只需在 Python 中捕获并添加所需的逻辑即可。
根据您的示例(这有助于说明与此问题的目标匹配和不匹配的内容):
/(?=^[a-z]*\d[a-z]*$)(^[a-z0-9]{5}$)/mg
然后,如果你想分组,我会在 Python 中这样做:
import re
st='''\
1aaaa
2aabb
jwzw3
jlwk6
bjkgp
5fm8s
x975t
k88q5
zl796
qm9hb
h6gtf
9rm9p'''
di={}
for m in re.finditer(r'(?=^[a-z]*\d[a-z]*$)(^[a-z0-9]{5}$)', st, re.M):
di.setdefault(len(set(m.group(1)))-1, []).append(m.group(1))
>>> di
{1: ['1aaaa'], 2: ['2aabb'], 3: ['jwzw3'], 4: ['jlwk6', 'qm9hb', 'h6gtf']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.