Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.
Project description
AntPathMatcher
Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.
References
Spring framework - AntPathMatcher
Features
- Match URL paths and file paths using Ant-style patterns
- Support for wildcards:
?- matches exactly one character (except path separators)*- matches zero or more characters (except path separators)**- matches zero or more directories in a path
- Extract variables from URI templates (e.g.,
/users/{id}matches/users/123withid=123) - Customizable path separators (default is
/but can be changed) - Fully type-hinted for modern Python development
- Compatible with Python 3.10+
Installation
pip install antpathmatcher
Or with uv:
uv add antpathmatcher
Quick Start
Basic Pattern Matching
from antpathmatcher import AntPathMatcher
# Create a matcher with default path separator (/)
matcher = AntPathMatcher()
# Basic matching with single character wildcard
matcher.match("com/t?st.jsp", "com/test.jsp") # True
matcher.match("com/t?st.jsp", "com/tast.jsp") # True
matcher.match("com/t?st.jsp", "com/txst.jsp") # True
matcher.match("com/t?st.jsp", "com/tst.jsp") # False (? requires exactly one character)
# Matching with * wildcard (matches within a path segment)
matcher.match("com/*.jsp", "com/demo.jsp") # True
matcher.match("com/*.jsp", "com/test.jsp") # True
matcher.match("com/*.jsp", "com/sub/test.jsp") # False (doesn't cross path boundaries)
# Matching with ** wildcard (matches across path segments)
matcher.match("com/**/test.jsp", "com/test.jsp") # True
matcher.match("com/**/test.jsp", "com/sub/test.jsp") # True
matcher.match("com/**/test.jsp", "com/sub/dir/test.jsp") # True
# Complex patterns
matcher.match("org/demo/**/*.jsp", "org/demo/views/home.jsp") # True
matcher.match("org/demo/**/*.jsp", "org/demo/templates/views/home.jsp") # True
Extracting URI Template Variables
from antpathmatcher import AntPathMatcher
matcher = AntPathMatcher()
# Basic variable extraction
variables = matcher.extract_uri_template_variables("/hotels/{hotel}", "/hotels/1")
print(variables) # {'hotel': '1'}
# Multiple variables
variables = matcher.extract_uri_template_variables(
"/users/{user_id}/posts/{post_id}",
"/users/123/posts/456"
)
print(variables) # {'user_id': '123', 'post_id': '456'}
Custom Path Separators
from antpathmatcher import AntPathMatcher
# Create a matcher with custom path separator
# Useful for matching things like Java package names
matcher = AntPathMatcher(path_separator=".")
# Now the patterns use dots as separators
matcher.match("com.example.*.service", "com.example.user.service") # True
matcher.match("com.example.???.service", "com.example.api.service") # True
matcher.match("com.**.service", "com.example.module.api.service") # True
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file antpathmatcher-1.0.0.tar.gz.
File metadata
- Download URL: antpathmatcher-1.0.0.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16b659ca7baf676bdee305f2dcbf6c9d1bc1ebd81fa43f25b9add603c08c1098
|
|
| MD5 |
8caa3a4814783f6f0f1cae2da2195470
|
|
| BLAKE2b-256 |
806bacef3e2b12e9ffe1bf87ed4777e074dfaea1a53c05eedab6ea2a00e5420f
|
File details
Details for the file antpathmatcher-1.0.0-py3-none-any.whl.
File metadata
- Download URL: antpathmatcher-1.0.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d41f8d445d12c211aaee655d928d152377b20bc9e4a43693566268c151a99728
|
|
| MD5 |
8877db55ee27d822801eaa597eb14299
|
|
| BLAKE2b-256 |
3f1bafc290ae4a25a7d627bf789baca83b1bf3425a5bd88555c35ff65afc6658
|