Skip to main content

cursive_re

Readable regular expressions for Python 3.6 and up.

Installation

pip install cursive_re

Examples

>>> from cursive_re import *

>>> hash = text('#')
>>> hexdigit = any_of(in_range('0', '9') + in_range('a', 'f') + in_range('A', 'F'))
>>> hexcolor = (
...     beginning_of_line() + hash +
...     group(repeated(hexdigit, exactly=6) | repeated(hexdigit, exactly=3)) +
...     end_of_line()
... )
>>> str(hexcolor)
'^\\#([a-f0-9]{6}|[a-f0-9]{3})$'

>>> hexcolor_re = compile(hexcolor)
re.compile('^\\#([a-f0-9]{6}|[a-f0-9]{3})$')

>>> hexcolor_re.match('#fff')
<re.Match object; span=(0, 4), match='#fff'>

>>> hexcolor_re.match('#ffff') is None
True

>>> hexcolor_re.match('#ffffff')
<re.Match object; span=(0, 7), match='#ffffff'>

>>> domain_name = one_or_more(any_of(in_range('a', 'z') + in_range('0', '9') + text('-')))
>>> domain = domain_name + zero_or_more(text('.') + domain_name)
>>> path_segment = zero_or_more(none_of('/'))
>>> path = zero_or_more(text('/') + path_segment)
>>> url = (
...     group(one_or_more(any_of(in_range('a', 'z'))), name='scheme') + text('://') +
...     group(domain, name='domain') +
...     group(path, name='path')
... )
>>> str(url)
'(?P<scheme>[a-z]+)://(?P<domain>[a-z0-9\-]+(?:\.[a-z0-9\-]+)*)(?P<path>(?:/[^/]*)*)'

Reference

cursive_re.compile

Compile a cursive_re expression to a real regular expression.

cursive_re.beginning_of_line

Matches the beginning of a line.

Examples:

>>> str(beginning_of_line())
'^'

cursive_re.end_of_line

Matches the end of a line.

Examples:

>>> str(end_of_line())
'$'

cursive_re.anything

Matches any character.

Examples:

>>> str(anything())
'.'

cursive_re.literal

Inserts a literal regular expression.

Examples:

>>> str(literal(r"\A\w"))
'\\A\\w'

cursive_re.text

Matches the given string exactly, escaping any special characters.

Examples:

>>> str(text("abc"))
'abc'

cursive_re.any_of

Matches any of the given characters.

Examples:

>>> str(any_of("ab"))
'[ab]'

>>> str(any_of(text("ab")))
'[ab]'

>>> str(any_of(text("[]")))
'[\\[\\]]'

cursive_re.none_of

Matches none of the given characters.

Examples:

>>> str(none_of("ab"))
'[^ab]'

>>> str(none_of(text("ab")))
'[^ab]'

>>> str(none_of(text("[]")))
'[^\\[\\]]'

cursive_re.in_range

Matches a character in the given range.

Examples:

>>> str(in_range("a", "z"))
'a-z'

cursive_re.zero_or_more

Matches zero or more of the given expr.

Examples:

>>> str(zero_or_more("a"))
'(?:a)*'

>>> str(zero_or_more(text("a")))
'(?:a)*'

>>> str(zero_or_more(text("abc")))
'(?:abc)*'

>>> str(zero_or_more(group(text("abc"))))
'(abc)*'

cursive_re.one_or_more

Matches one or more of the given expr.

Examples:

>>> str(one_or_more("a"))
'(?:a)+'

>>> str(one_or_more(text("a")))
'(?:a)+'

>>> str(one_or_more(group(text("abc"))))
'(abc)+'

cursive_re.maybe

Matches an expr if present.

Examples:

>>> str(maybe("abc"))
'(?:abc)?'

>>> str(maybe(text("abc")))
'(?:abc)?'

>>> str(maybe(group(text("abc"))))
'(abc)?'

>>> str(maybe(any_of("abc")))
'[abc]?'

cursive_re.repeated

Matches an expr repeated an exact number of times.

Examples:

>>> str(repeated("a", exactly=5))
'(?:a){5}'

>>> str(repeated(text("a"), exactly=5))
'(?:a){5}'

>>> str(repeated(text("a"), at_least=1))
'(?:a){1,}'

>>> str(repeated(text("a"), at_most=5))
'(?:a){0,5}'

>>> str(repeated(text("a"), at_least=2, at_most=5, greedy=False))
'(?:a){2,5}?'

cursive_re.group

Denotes a group whose contents can be retrieved after a match is performed.

Examples:

>>> str(group(text("a")))
'(a)'

>>> str(group(any_of("abc"), name="chars"))
'(?P<chars>[abc])'

Release files for cursive-re 0.0.4

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

Source distribution (sdist)

Source distribution for cursive-re 0.0.4
File Size Uploaded
cursive_re-0.0.4.tar.gz 4.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cursive-re 0.0.4
File Interpreter ABI Platform
cursive_re-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 9.9 kB

Release files / cursive_re-0.0.4.tar.gz

Download URL cursive_re-0.0.4.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
76d95b552deb2f531b4d07fdfdc258e5f1d0f84bdb993cc954e35d30086ba0f8
BLAKE2b-256 checksum
How to use checksums
35db97138bcacdf133c4039092438824250d8b52463541281e0beb79c034b75c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release files / cursive_re-0.0.4-py3-none-any.whl

Download URL cursive_re-0.0.4-py3-none-any.whl
Size 5.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36008331e91e5d3c96ecb6701f12c30fc815f2aecd782a0cebd10d73a0a7f11c
BLAKE2b-256 checksum
How to use checksums
be2cc9c5a4145fe61aef4a3bf7e9028566c0563971b5798efefb6fd5949ee825
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

0.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