Skip to main content

RegexSolver Python API Client

Homepage | Online Demo | Documentation | Developer Console

RegexSolver is a powerful toolkit for building, combining, and analyzing regular expressions. It is designed for constraint solvers, test generators, and other systems that need advanced regex operations.

Installation

pip install regexsolver

Requirements: Python >= 3.10

Quick Start

  1. Create an API token in the Developer Console.
  2. Initialize the client and start working with terms.

Synchronous Usage

The synchronous client provides a simple, blocking API.

from regexsolver import RegexSolverClient, Term

client = RegexSolverClient("REGEXSOLVER_API_TOKEN")

term1 = Term.regex(r"(abc|de|fg){2,}")
term2 = Term.regex(r"de.*")

intersection = client.intersection(term1, term2)
pattern = client.get_pattern(intersection)
print(pattern)  # de(abc|de|fg)+

Asynchronous Usage

For non-blocking applications, use the asynchronous client.

import asyncio
from regexsolver import AsyncRegexSolverClient, Term

async def main():
    async with AsyncRegexSolverClient("REGEXSOLVER_API_TOKEN") as client:
        term1 = Term.regex(r"(abc|de|fg){2,}")
        term2 = Term.regex(r"de.*")

        intersection = await client.intersection(term1, term2)
        pattern = await client.get_pattern(intersection)
        print(pattern)  # de(abc|de|fg)+


asyncio.run(main())

Key Concepts & Limitations

RegexSolver supports a subset of regular expressions that adhere to the principles of regular languages. Here are the key characteristics and limitations of the regular expressions supported by RegexSolver:

  • Anchored Expressions: All regular expressions in RegexSolver are anchored. This means that the expressions are treated as if they start and end at the boundaries of the input text. For example, the expression abc will match the string "abc" but not "xabc" or "abcx".
  • Lookahead/Lookbehind: RegexSolver does not support lookahead ((?=...)) or lookbehind ((?<=...)) assertions. Using them returns an error.
  • Pure Regular Expressions: RegexSolver focuses on pure regular expressions as defined in regular language theory. This means features that extend beyond regular languages, such as backreferences (\1, \2, etc.), are not supported. Any use of backreference would return an error.
  • Greedy/Ungreedy Quantifiers: The concept of ungreedy (*?, +?, ??) quantifiers is not supported. All quantifiers are treated as greedy. For example, a* or a*? will match the longest possible sequence of "a"s.
  • Line Feed and Dot: RegexSolver handles all characters the same way. The dot . matches any Unicode character including line feed (\n).
  • Empty Regular Expressions: The empty language (matches no string) is represented by constructs like [] (empty character class). This is distinct from the empty string.

Response Formats

The API can handle terms in two formats:

  • regex: a regular expression pattern
  • fair: FAIR (Fast Automaton Internal Representation), a stable, signed format used internally by the engine

By default, the engine returns whatever the operation produces, with no extra conversion. Override with response_format, accepted by the operations that return a term:

from regexsolver import ResponseFormat

term1 = Term.regex(r"abcde")
term2 = Term.regex(r"de")

result = client.union(term1, term2, response_format=ResponseFormat.REGEX)
print(result)  # regex=(abc)?de

result = client.union(term1, term2, response_format=ResponseFormat.FAIR)
print(result)  # fair=...

If the format does not matter, omit response_format or set it to ResponseFormat.ANY.

Regardless of the format, you can always call get_pattern() to obtain the regex pattern of a term.

Bounding execution time

Set a server-side compute timeout in milliseconds with execution_timeout:

from regexsolver.exceptions import TimeoutExceededError

# Limit the server-side compute time to 100 ms
try:
    term1 = Term.regex(r".*ab.*c(de|fg).*dab.*c(de|fg).*ab.*c(de|fg).*dab.*c")
    term2 = Term.regex(r".*abc.*")
    
    res = client.difference(term1, term2, execution_timeout=100)
except TimeoutExceededError as error:
    print(error) # The API returned the following error: The operation took too much time.

Timeout is best effort. The exact time is not guaranteed.

API Overview

RegexSolverClient and AsyncRegexSolverClient expose the following methods. Every method accepts optional keyword arguments: operations that return a term take response_format, deterministic and execution_timeout, while analyze operations and determinize() take execution_timeout only; the response format is not theirs to choose. generate_strings() additionally takes its ordering, seed, length and charset options as keyword arguments.

Analyze

Method Return Description
client.equivalent(term1, term2, **kwargs) bool True if term1 and term2 accept exactly the same language.
client.get_cardinality(term, **kwargs) Cardinality Returns the number of possible matched strings.
client.get_dot(term, **kwargs) str Returns a Graphviz DOT representation of the automaton.
client.get_length(term, **kwargs) Length Returns the minimum and maximum length of matched strings.
client.get_pattern(term, **kwargs) str Returns a regular expression pattern for the term.
client.is_empty(term, **kwargs) bool True if the term matches no string.
client.is_empty_string(term, **kwargs) bool True if the term matches only the empty string.
client.is_total(term, **kwargs) bool True if the term matches all possible strings.
client.is_deterministic(term, **kwargs) bool True if the term's automaton is deterministic. Only a deterministic FAIR guarantees consistent string ordering across paginated generate_strings() calls; call determinize() first if this is False.
client.subset(term_subset, term_superset, **kwargs) bool True if every string matched by term_subset is also matched by term_superset.

Note: For AsyncRegexSolverClient, these methods are coroutines and must be awaited.

Compute

Method Return Description
client.complement(term, **kwargs) Term Computes the complement of the given term.
client.concat(term1, term2, ..., **kwargs) Term Concatenates multiple terms in order.
client.determinize(term, **kwargs) Term Computes a deterministic FAIR for the given term, suitable for consistent pagination with generate_strings().
client.difference(base_term, excluded_term, **kwargs) Term Computes the difference base_term - excluded_term.
client.intersection(term1, term2, ..., **kwargs) Term Computes the intersection of the given terms.
client.repeat(term, min_val, max_val, **kwargs) Term Computes the repetition of the term between min_val and max_val times.
client.union(term1, term2, ..., **kwargs) Term Computes the union of the given terms.

Note: For AsyncRegexSolverClient, these methods are coroutines and must be awaited.

Generate

Method Return Description
client.generate_strings(term, limit, offset, **kwargs) List[str] Generates up to limit unique strings matched by term, skipping the first offset strings. Keyword arguments control path_order, character_order, seed, min_length, max_length and charset.

Note: For AsyncRegexSolverClient, this method is a coroutine and must be awaited.

Cross-Language Support

If you want to use this library with other programming languages, we provide:

For more information about how to use the wrappers, you can refer to our guide.

You can also take a look at regexsolver which contains the source code of the engine.

License

This project is licensed under the MIT License.

Metadata

Release files for regexsolver 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for regexsolver 1.1.0
File Size Uploaded
regexsolver-1.1.0.tar.gz 64.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for regexsolver 1.1.0
File Interpreter ABI Platform
regexsolver-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 172.6 kB

Release files / regexsolver-1.1.0.tar.gz

Download URL regexsolver-1.1.0.tar.gz
Size 64.0 kB
Tags Source
SHA-256 checksum
How to use checksums
360600ab95aca186acc1f9e6e7ab869b061102cad7a42b36b032c04d1d5ca93f
BLAKE2b-256 checksum
How to use checksums
9bb95f2f440ae4e45afbc86a4af58e4774e2df14dcecead8d68e95af0a0c9a9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.

Transparency log

Release files / regexsolver-1.1.0-py3-none-any.whl

Download URL regexsolver-1.1.0-py3-none-any.whl
Size 108.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
40b70bb6c6ba3a6a1f1f8f144b74c16fcbf95f7e8d7da05d14151604df62ab69
BLAKE2b-256 checksum
How to use checksums
3bca4211a9dd842fda1df303390239fb11f5d47748cb685e98811d7101eb1976
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page