Path matching utilities
Python implementation of git’s wildmatch and POSIX.1-2008 fnmatch.
The aim of this package is to provide a file matching module complying with the POSIX standard and allow compatibility with git.
from pathmatch import wildmatch # Pattern matching auto-generated test files (extension .pyc, .pyo or .pyd inside tests/) pattern = u'tests/**/*.py[cod]' # Match single files: wildmatch.match(pattern, u'tests/auto.pyc') # True wildmatch.match(pattern, u'auto.pyc') # False # Filter a collection: files = [ u'tests/deep/auto.pyd', u'tests/module.py', u'package/auto.pyc', u'tests/auto.pyo' ] list(wildmatch.filter(pattern, files)) # [u'tests/deep/auto.pyd', u'tests/auto.pyo'] # Compile a pattern compiled = wildmatch.WildmatchPattern(pattern) compiled.match(u'tests/') # False
Currently, the following wildmatch features are supported:
- Wildstar ** operator and associated semantics (/ requires a literal match)
- Literal matching
- Question mark ? (any character) and asterisk * (any string) operators
- Bracket expressions [abc] (character alternatives)
Bracket expression features:
- Negation (supports both ^ and ! meta-characters)
- Range expressions a-z
- Collation Symbol [.ch.]
- Equivalence classes syntax [=e=], but fallback to collation symbol semantics
- Supports the path_name flag to exclude / (which requires a literal match)
See test_wildmatch.py for more details.
- case_fold (case insensitive) option is not supported
- period (require literal match for leading period) option is not supported
- Negated bracket expression with multi-character collating elements are not supported
- Character classes [:alpha:] for bracket expressions are not supported
Contributions are welcomed
The dedicated fnmatch module is not yet configured (this should just be a subset of wildmatch).
You can execute the tests with the following command:
python -m unittest discover -s . -p test*.py
MIT License, Copyright (c) 2016 Charles Samborski