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.
Limitations:
case_fold
(case insensitive) option is not supportedperiod
(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
- fnmatch, see also pattern matching
- wildmatch C implementation for git
- wildmatch C implementation (alternative)
- wildmatch Javascript implementation
MIT License, Copyright (c) 2016 Charles Samborski