Oven logo

Oven

Published

a regex intersection checker

pip install interegular

Package Downloads

Weekly DownloadsMonthly Downloads

Authors

MegaIng

Project URLs

Requires Python

>=3.7

Dependencies

No dependencies

Interegular

regex intersection checker

A library to check a subset of python regexes for intersections. Based on grennery by @qntm. Adapted for lark-parser.

The primary difference with grennery library is that interegular is focused on speed and compatibility with python re syntax, whereas grennery has a way to reconstruct a regex from a FSM, which interegular lacks.

Interface

FunctionUsage
compare_regexes(*regexes: str)Takes a series of regexes as strings and returns a Generator of all intersections as (str, str)
parse_pattern(regex: str)Parses a regex as string to a Pattern object
interegular.compare_patterns(*patterns: Pattern)Takes a series of regexes as patterns and returns a Generator of all intersections as (Pattern, Pattern)
PatternA class representing a parsed regex (intermediate representation)
REFlagsA enum representing the flags a regex can have
FSMA class representing a fully parsed regex. (Has many useful members)
Pattern.with_flags(added: REFlags, removed: REFlags)A function to change the flags that are applied to a regex
Pattern.to_fsm() -> FSMA function to create a FSM object from the Pattern
ComparatorA Class to compare a group of Patterns

What is supported?

Most normal python-regex syntax is support. But because of the backend that is used (final-state-machines), some things can not be implemented. This includes:

  • Backwards references (\1, (?P=open))
  • Conditional Matching ((?(1)a|b))
  • Some cases of lookaheads/lookbacks (You gotta try out which work and which don't)
    • A word of warning: This is currently not correctly handled, and some things might parse, but not work correctly. I am currently working on this.

Some things are simply not implemented and will implemented in the future:

  • Some flags (Progress: ims from aiLmsux)
  • Some cases of lookaheads/lookbacks (You gotta try out which work and which don't)

TODO

  • Docs
  • More tests
  • Checks that the syntax is correctly handled.