import re
def repl(m):
res = "{}{}".format(re.escape(m.group(1)), m.group(2).replace("*", ".*").replace("?", "."))
if m.group(3):
res += re.escape(m.group(3))
return res
def glob_to_regex(glob):
glob = re.sub(r'\*{2,}', '*', glob)
return '(?s)' + re.sub(r'([^?*]*)([*?]+)([^?*]+$)?', repl , glob)
l = ['baab', 'abbb', 'fc', 'AA', 'abb.']
print([x for x in l if re.search(glob_to_regex('?b*b'), x)])
print([x for x in l if re.search(glob_to_regex('?b*.'), x)])
aW1wb3J0IHJlCgpkZWYgcmVwbChtKToKCXJlcyA9ICJ7fXt9Ii5mb3JtYXQocmUuZXNjYXBlKG0uZ3JvdXAoMSkpLCBtLmdyb3VwKDIpLnJlcGxhY2UoIioiLCAiLioiKS5yZXBsYWNlKCI/IiwgIi4iKSkKCWlmIG0uZ3JvdXAoMyk6CgkJcmVzICs9IHJlLmVzY2FwZShtLmdyb3VwKDMpKQoJcmV0dXJuIHJlcwoKZGVmIGdsb2JfdG9fcmVnZXgoZ2xvYik6CglnbG9iID0gcmUuc3ViKHInXCp7Mix9JywgJyonLCBnbG9iKQoJcmV0dXJuICcoP3MpJyArIHJlLnN1YihyJyhbXj8qXSopKFsqP10rKShbXj8qXSskKT8nLCByZXBsICwgZ2xvYikKCmwgPSBbJ2JhYWInLCAnYWJiYicsICdmYycsICdBQScsICdhYmIuJ10KcHJpbnQoW3ggZm9yIHggaW4gbCBpZiByZS5zZWFyY2goZ2xvYl90b19yZWdleCgnP2IqYicpLCB4KV0pCnByaW50KFt4IGZvciB4IGluIGwgaWYgcmUuc2VhcmNoKGdsb2JfdG9fcmVnZXgoJz9iKi4nKSwgeCldKQ==