Skip to main content

Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.

Project description

AntPathMatcher

Python Version License: MIT Type Hints macOS Windows Linux

Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.

🔗 References

🚀 Key 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/123 with id=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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

antpathmatcher-1.0.2.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

antpathmatcher-1.0.2-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file antpathmatcher-1.0.2.tar.gz.

File metadata

  • Download URL: antpathmatcher-1.0.2.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for antpathmatcher-1.0.2.tar.gz
Algorithm Hash digest
SHA256 6d418a19a40dc78c593b474e263757c1fe844e9fb601d758f500fabf2a51d7b9
MD5 44b46781455e3898d5dedace57098b61
BLAKE2b-256 448adbdcfc59b61fe14d6da4705c12d5c3759e9c345a6f7f903b30b8dbef18c8

See more details on using hashes here.

File details

Details for the file antpathmatcher-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: antpathmatcher-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for antpathmatcher-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c376897f51a78c3ae3639d51f8c8dc17af80d920b5895d34d56089bf5456b510
MD5 4a525c9e2633e354f3d24176c66c678a
BLAKE2b-256 d19eb8b168e33273f2b9fb698b410885cde4b0e3e197f082b66ee202de34af4f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page