构建正则表达式,12个字母无序,固定数量的单个字母

Building a RegEx, 12 letters without order, fixed number of individual letters

我有一个复杂的案例,我无法进一步了解。目标是通过 RegEx 检查字符串是否满足以下条件:

匹配示例:

我的第一次尝试:

results = re.match(r"^W{1}S{1}I{1}T{2}O{1}B{1}A{1}E{2}R{1}H{1}$", word)

第一次尝试的问题在于它仅在遵循 RegEx 中的字母顺序时才匹配。这违反了条件 4

我的第二次尝试:

results = re.match(r"^[W{1}S{1}I{1}T{2}O{1}B{1}A{1}E{2}R{1}H{1}]{12}$", word)

试验二的问题:现在顺序不再重要,但忽略了单个字母的确切数量。

到目前为止,我只能做 RegEx 的基础知识,不能再深入了。如果有人知道符合上述四个规则的正则表达式是什么样的,我将不胜感激。

一种可能,虽然我仍然认为正则表达式不适合这个。检查所有字母是否都出现了所需的数量,并且总共有 12 个字母(因此没有空间容纳任何 more/other 个字母):

import re

for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
    print(re.fullmatch('(?=.*W)(?=.*S)(?=.*I)(?=.*O)'
                       '(?=.*B)(?=.*A)(?=.*R)(?=.*H)'
                       '(?=.*T.*T)(?=.*E.*E).{12}', s))

另一个,检查除 T 和 E 之外的 none 出现两次,none 出现三次,并且我们只有所需的字母,总共 12 个:

import re

for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
    print(re.fullmatch(r'(?!.*([^TE]).*)'
                       r'(?!.*(.).*.*)'
                       r'[WSIOBARHTE]{12}', s))

更简单的方法:

for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
    print(sorted(s) == sorted('WSIOBARHTTEE'))