https://github.com/bogdanp/cursive_re
Readable regular expressions for Python 3.6 and up.
https://github.com/bogdanp/cursive_re
python python3 regex
Last synced: 9 months ago
JSON representation
Readable regular expressions for Python 3.6 and up.
- Host: GitHub
- URL: https://github.com/bogdanp/cursive_re
- Owner: Bogdanp
- License: bsd-3-clause
- Created: 2018-10-22T06:16:34.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T07:17:48.000Z (over 1 year ago)
- Last Synced: 2025-05-16T09:05:18.030Z (9 months ago)
- Topics: python, python3, regex
- Language: Python
- Homepage:
- Size: 24.4 KB
- Stars: 360
- Watchers: 9
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cursive_re
Readable regular expressions for Python 3.6 and up.
## Installation
pip install cursive_re
## Examples
``` python
>>> 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)
'^\\#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$'
>>> hexcolor_re = compile(hexcolor)
re.compile('^\\#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$')
>>> hexcolor_re.match('#fff')
>>> hexcolor_re.match('#ffff') is None
True
>>> hexcolor_re.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[a-z]+)://(?P[a-z0-9\-]+(?:\.[a-z0-9\-]+)*)(?P(?:/[^/]*)*)'
```
## 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[abc])'