gpt4 book ai didi

python - 如何找到所有长度为5且有1个数字和4个字母划分为所有组组合的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:54 24 4
gpt4 key购买 nike

我需要正则表达式来计算所有长度为 5 的字符串组,其中包含 1 个数字 (0-9) 和 4 个小写字母 (a-z),如下所示:

  • 1个数字和所有字母都不同
    例如:1abcd
  • 1个数字,2个字母相等,其余不同
    例如:a2acd
  • 1个数字,3个字母相等,其余不同
    例如:aa3ad
  • 1个数字,4个字母相等
    例如:aa5aa
  • 1个数字,2个字母相等,另外两个不同的字母相等
    例如:1aabb

我知道如何将所有长度为 5 的字符串与字母和 1 位数字匹配:
^(?=.{5}$)[a-z]*(?:\d[a-z]*){1}$
Here是一个例子。

但我不知道如何为上述每个组做。
我读到第一个例子(1 位数字和所有字母都不同)我需要防止重复字符 .*(.).*\1 但是我试过:

^(?=.{5}$)[a-z]*(?:\d[a-z]*)(.*(.).*\1){1}$  

它没有用。

最佳答案

您可以使用:

/\b(?=[a-zA-Z]*\d[a-zA-Z]*)([a-zA-Z0-9]{5})/

Demo

添加第二个 \b 以拒绝超过 5 个字符的匹配字符串:

/\b(?=[a-zA-Z]*\d[a-zA-Z]*)([a-zA-Z0-9]{5}\b)/

Demo 2

如果你想限制为小写字母:

/\b(?=[a-z]*\d[a-z]*)([a-z0-9]{5}\b)/

由于四个字母的所有组合都是可能的,因此无需进一步分类。全部相同,全部不同,有些相同。

如果您确实想要对字母进行分类,只需在 Python 中捕获并添加所需的逻辑即可。


根据您的示例(说明什么与此问题的目标匹配和不匹配会很有帮助):

/(?=^[a-z]*\d[a-z]*$)(^[a-z0-9]{5}$)/mg

Demo 3

然后如果你想分组,我会用 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']}

关于python - 如何找到所有长度为5且有1个数字和4个字母划分为所有组组合的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52210973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com