Rust-powered blazing-fast regex search for Python
Project description
rgpy
rgpy is a blazing-fast, Rust-powered regular expression search tool for Python.
It brings the speed of ripgrep and regex into your Python environment, ideal for scanning large log files and datasets.
🚀 Features
- Super-fast regex matching (powered by Rust)
- Supports both
regexandpcre2 - Multithreaded line scanning (via Rayon)
- Easy-to-use Python API
- Supports:
- Count-only mode (
count=True) - Invert match (
invert_match=True) - Recursive directory search (
search_dir())
- Count-only mode (
📦 Installation
Install via pip using maturin:
pip install maturin
maturin develop # for local development
You can also install from PyPI once published:
pip install rgpy
🧪 Example Usage
from rgpy import search_file
results = search_file(
pattern="error",
path="./logs/sample.log",
engine="regex", # or "pcre2"
ignore_case=True
)
for line in results:
print(f"{line.path}:{line.line_number}: {line.text}")
🔢 Count-only mode
from rgpy import search_file
count = search_file("error", "./logs/sample.log", count=True)
print("Total matches:", count)
🚫 Invert match (return lines that do NOT match)
from rgpy import search_file
non_matches = search_file("error", "./logs/sample.log", invert_match=True)
for line in non_matches:
print(f"{line.line_number}: {line.text}")
📂 Recursive search in a directory
from rgpy import search_dir
results = search_dir("timeout", "./logs", ignore_case=True)
for line in results:
print(f"{line.path}:{line.line_number}: {line.text}")
multiprocessing support
from multiprocessing import Pool, cpu_count
from rgpy import search_file
LOG_FILE = "./logs/sample.log"
with open(LOG_FILE, "r", encoding="utf-8", errors="ignore") as f:
lines = f.readlines()
chunk_size = len(lines) // cpu_count()
chunks = [lines[i:i + chunk_size] for i in range(0, len(lines), chunk_size)]
with Pool() as pool:
counts = pool.map(search_file("error", LOG_FILE, invert_match=True), chunks)
🛠 Engine Options
"regex": Rust’s built-in, fast and safe regex engine (no backreferences or lookbehind)"pcre2": Perl-compatible regex with full support for lookaround, backreference, etc. (slightly slower)
⚙️ Arguments
| Parameter | Type | Description |
|---|---|---|
pattern |
str |
Regex pattern to search |
path/dir |
str |
File path (search_file) or directory (search_dir) |
engine |
str |
"regex" (default) or "pcre2" |
ignore_case |
bool |
Case-insensitive matching (optional) |
count |
bool |
Return number of matches only (optional) |
invert_match |
bool |
Return lines that do not match the pattern (optional) |
⚡ Performance
rgpy uses Rust + Rayon for multithreaded file processing.
This makes it significantly faster than Python’s built-in re module, especially for large files.
Without multiprocessing, rgpy is about 24% faster than re.
== Time Comparison (in seconds) ==
rgpy: 3.463s
rgpy.compile: 3.466s
rgpy.compile + mp: 2.441s
re: 4.541s
re.compile: 4.228s
re.compile + mp: 1.898s
📜 License
MIT License
👤 Author
Developed by [cpprhtn/Junwon Lee]
Inspired by ripgrep and pyo3
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 rgpy-0.2.3-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rgpy-0.2.3-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
084057aad5c4b79caa420c364c88ff035ac3f434401e0b60e63a0850375df33d
|
|
| MD5 |
d010f321bde7c175ea92f96a1be932ea
|
|
| BLAKE2b-256 |
f7ee519ed7be0f1c5096850f8218770158a59ae64b646ade6c0a5c37954e4fd8
|