Skip to main content

Regular expressions for objects

Project description

REfO

Lacking a proper name, REfO stands for "Regular Expressions for Objects".

It's a python library that supplies a functionality very similar to the python re module (regular expressions) but for arbitrary sequences of objects instead of strings (sequences of characters).

In addition to that, it's possible to match each object in a sequence with not only equality, but an arbitrary python function. For example, if you have a sequence of integers you can make a regular expression that asks for a even number followed by a prime number followed by a 3-divisible number.

This software was written by Rafael Carrascosa while working at Machinalis in the first months of 2012.

Contact: rcarrascosa@machinalis.com or rafacarrascosa xyz gmail.com (replace " xyz " with "@")

Build Status

How to use it

The syntax is a little bit different than python's re, and similar to that of pyparsing, you have to more-or-less explicitly build the syntax tree of your regular expression. For instance:

"ab" is Literal("a") + Literal("b")

"a*" is Star(Literal("a"))

"(ab)+|(bb)*?" is:

a = Literal("a")
b = Literal("b")
regex = Plus(a + b) | Star(b + b, greedy=False)

You can also assign a group to any sub-match and later on retrieve the matched content, for instance:

regex = Group(Plus(a + b), "foobar")  | (b + b)
m = match(regex, "abab")
print m.span("foobar")  # prints (0, 4)

For more, check out the examples in the examples folder.

How we use it

At Machinalis we use REfO for applications similar to that in examples/words.py, check it out!

About the implementation

I use a Thompson-like virtual machine aproach, which ensures polynomial time worst-case complexity. See examples/poly_time.py for an example of this.

The implementation is heavily based on Russ Cox notes, see http://swtch.com/~rsc/regexp/regexp2.html for the source.

If you go to read the code, some glossary:

  • RE -- regular expression
  • VM -- virtual machine
  • Epsilon transitions -- All VM instructions that do not consume a symbol or stop the thread (for example an Accept).

Acknowledgements

Thanks Russ Cox for sharing the awesome info and insights on your web site.

Thanks Javier Mansilla for reviewing the code and being enthusiastic about it.

Thanks Machinalis for everything :)

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

fenixrefo-0.13.1.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

fenixrefo-0.13.1-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file fenixrefo-0.13.1.tar.gz.

File metadata

  • Download URL: fenixrefo-0.13.1.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for fenixrefo-0.13.1.tar.gz
Algorithm Hash digest
SHA256 6e9de2efcd5525b3600d71ce1bbe979f9877f527973a2e585cb63d75b40d16aa
MD5 cbadafa99bb3286a50e54e41fe450980
BLAKE2b-256 24cc6766ae549212657f160273d598e0d5640332f4c905b65bcae4afaa674279

See more details on using hashes here.

File details

Details for the file fenixrefo-0.13.1-py3-none-any.whl.

File metadata

  • Download URL: fenixrefo-0.13.1-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for fenixrefo-0.13.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cbacd8d67eaf9df005b3a0c152aaf54eba16a4d86e57e179acb6a791ad83ba6a
MD5 f7818336799007d1f27f1a44b49a7305
BLAKE2b-256 fff3657c7a62ad5bcd75268c112303586f501a2d5503a46302a19fcf314392ac

See more details on using hashes here.

Supported by

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