簡體   English   中英

如何找到所有長度為 5 且有 1 位數字和 4 個字母的字符串分成所有組組合

[英]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 ),如下所示:

  • 1 位數字和所有字母都不同
    例如: 1abcd
  • 1位數字,2個字母相等,其余不同
    例如: a2acd
  • 1個數字,3個字母相等,其余不同
    例如: aa3ad
  • 1個數字,4個字母相等
    例如: aa5aa
  • 1個數字,2個字母相等,另外兩個不同的字母相等
    例如: 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)/

演示 2

如果您想限制為小寫字母:

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

由於四個字母的所有組合都是可能的,因此無需進一步分類。 都一樣,都不同,有些是一樣的。

如果您確實想對字母進行分類,只需在 Python 中捕獲並添加所需的邏輯即可。


根據您的示例(這有助於說明與此問題的目標匹配和不匹配的內容):

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

演示 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']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM