How to install
pip install pypama
Presentation
This package provides a pattern matching for list of objects. Just as Regex provides regular expression for strings, this package provides regular expression for other type of lists.
An example is worth a thousand words: assume you have a list
>>> example_list = ['a', 'a', 1, '', None, 'b', 'c', 'e']
For some reason, you know that there is an int and a None, and you want to extract that number and the 2 strings following the None
>>> from pypama import build_pattern, is_int, is_none
>>> g = build_pattern((~is_int).star(False), '(', is_int, ')', '.*', is_none, '(',ANY,ANY, ')')
>>> g.match(example_list).groups()
[[1], ['b', 'c']]
~is_int will matching anything that’s not an integer
.star(False): equivalent to *? in regular expressions: repeat as many as necessary
parenthesis are for capturing groups
.* is short for ANY.star() (match anything, repeatedly)
Therefore the pattern above reads as follow: match anything that’s not an int, repeatedly, until you find an int that you capture in group 1. Then match anything until you find a None. That must be followed by two elements that you capture in group 2.
This is therefore very similar to the re package, but applied to a list and with matching that goes beyond strings.
Usage
build_pattern(*args, **functions) where args is a list of strings or Pattern objects, and functions maps function names to executable.
- The args can be a string or a list of strings containing:
<string>: will match the string inside <>
callable unction: X will match if function(X) returns True
X?: will be ignored or match X
X*: will match if X matches repeatedly (greedy)
X*?: will match if X matches repeatedly (non greedy)
(X): will capture the X in a group
(P<name>X): will capture X in a group named “name”
X|Y: will match if X or Y matches
\n: will match the nth group previously matched
<r:X>: will match if the word matches regexp X
<re:X>: same as <r:X>
<c:function> or <call:function>: will match if function(X) matches. If function does not exist in the namespace of pypama, add the definition in the function call eg build_pattern('<c:foo>', foo=lambda x:x<2) will match [1]
. will match any item
$ will match if at the end of the list
X{n} will match X exactly n times. n can be a list of integer
X!: will match if the item doesn’t match X (X must match exactly 1 element)
- Both are equally valid and evaluate to the same result;
build_pattern('<hello>','<world>','.*')
build_pattern('<hello><world>.*')
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pypama-1.1.tar.gz.
File metadata
- Download URL: pypama-1.1.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/1.11.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/38.4.0 requests-toolbelt/0.8.0 tqdm/4.32.1 CPython/3.6.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efe66ce774afd35add9b91fa1600716118d4c8ad44bf49ffc05053c0f97a3c6a
|
|
| MD5 |
7b3882de1b37d3f41814b38ee69bc80a
|
|
| BLAKE2b-256 |
980ff4817eff671c038a4420cab5dd5e28423e7877429f9977eb9cc16fe8c463
|