Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Unix Match by tom-tom
# unix_match = __import__('fnmatch').fnmatch
from re import split, fullmatch
def unix_match(filename: str, pattern: str) -> bool:
def esc_br(s):
return s.replace('[', r'\[').replace(']', r'\]')
def non_seq(s):
return esc_br(s.replace('.', r'\.').replace('*', '.*').replace('?', '.'))
def seq(s):
s = esc_br(s[1:-1])
return fr'[{(s, "^" + s[1:])[s.startswith("!")]}]'
pattern = ''.join((non_seq, seq)[i % 2](s) for i, s in
enumerate(split(r'(\[(?:.[^]]+?|[^!])\])', pattern)))
return bool(fullmatch(pattern, filename))
July 9, 2019