from enum import Enum
import re

class RegexExpression(Enum):
    LOWERCASE = re.compile('[a-z]')
    UPPERCASE = re.compile('[A-Z]')
    DIGIT = re.compile('\d')
    SYMBOLS = re.compile('\W')

from operator import methodcaller
from re import finditer

UNICODE_MAX = 0xFFFF
UNICODE = ''.join(map(chr, range(UNICODE_MAX + 1)))
ASCII = UNICODE [:128]

def class_contents(pattern, unicode=True, printable=True):
    base = UNICODE if unicode else ASCII
    result = map(methodcaller('group'), finditer(pattern, base))
    if printable:
        result = filter(str.isprintable, result)
    return ''.join(result)

for unc in (False, True):
    for expr in RegexExpression:
        print('{}({}): {!r}'.format(expr.name, 'unicode' if unc else 'ascii', class_contents(expr.value, unc)))
