регулярные выражения: найти одинаковое кол-во символов (порядок произвольный)

подскажите каким регулярным выражением можно найти следующу подстроку

0<1 и 2 d в произвольном подядке, но кол-во 1 и 2 должно быть одинаковым>0

например в строке

70011212208012209022211101

должно быть найдено

01121220
02221110

а вот

01220

должно быть проигнарировано потому что 2ек больше 1


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy

Регулярным выражением этого не сделать.

def search(s):
    i = s.find('0')
    while i != -1:
        j = s.find('0', i + 1)
        if j != -1:
            c1 = s.count('1', i + 1, j)
            c2 = s.count('2', i + 1, j)
            if c1 == c2 and c1 + c2 == j - (i + 1):
                yield s[i:j + 1]
        i = j


print(*search('70011212208012209022211101'))
00 01121220 02221110
→ Ссылка
Автор решения: Алексей Р

А почему бы не совместить?

import re

text = '70011212208012209022211101'
for t in re.findall(r'(?<=0)[12]*(?=0)', text):
    print(f'{("" if t.count("1") == t.count("2") else "не ")}подходит: 0{t}0')
подходит: 00
подходит: 01121220
не подходит: 01220
подходит: 02221110
→ Ссылка