Abnormal expressions
Abnormal expressions (abnex) is an alternative to regular expressions (regex). This is a Python library but the abnex syntax could be ported to other languages.
Examples
Matching an email address
-
Regex
([\w\._-]+)@([\w\.]+)
-
Abnex
{[w"._-"]1++}"@"{[w"."]1++}
-
Abnex (spaced)
{[w "._-"]1++} "@" {[w "."]1++}
-
Abnex (expanded)
{ [w "._-"]1++ } "@" { [w "."]1++ }A more advanced pattern:
{{{[a-z '_']1++} {[a-z 0-9 '_-.']0++}} '@' {{[a-z 0-9]1++} '.' {[a-z 0-9]1++} {[a-z 0-9 '-_.']0++}} {[a-z 0-9]1++}}.
Why is Abnex Better?
- It's easier to read, write and understand.
- You can use spaces inside of the expression, you can also "expand" it, i.e. write it over multiple lines and use indention.
- You don't have to use a backslashes all the time
- More logical/common symbols like
!for not,{}for groups,1++,0++,0+for: one or more, zero or more, zero or one. - It's easier to see if a symbol is an actual symbol you are searching for or if it's a regex character, ex:
- Regex:
[\w-]+@[\w-_]+ - Abnex:
[w "-"]1++ "@" [w "-"]1++
- Regex:
Documentation
Regex on right after -> is the abnex equivalent
Anchors
- Start of string, or start of line in multi-line pattern
^->->
- End of string, or end of line in multi-line pattern
$-><-
- Start of string
\A->s>
- End of string
\Z-><s
- Word boundary
\b->:
- Not word boundary
\B->!:
- Start of word
\<->w>
- End of word
\>-><w
Character Classes
- Control character
\c->c
- White space
\s->_
- Not white space
\S->!_
- Digit
\d->d
- Not digit
\D->!d
- Word
\w->w
- Not word
\W->!w
- Hexadecimal digit
\x->x
- Octal digit
\o->o
Quantifiers
- 0 or more
*->0++
- 1 or more
+->1++
- 0 or 1
?->0+
Groups and Ranges
- Any character except new line (\n)
.->*
- a or b
a|b->"a"|"b"
- Group
(...)->{...}
- Passive (non-capturing) group
(?:...)->{#...}
- Range (a or b or c)
[abc]->['abc']or["a" "b" "c"]
- Not in set
[^...]->[!...]
- Lower case letter from a to Z
[a-q]->[a-z]
- Upper case letter from A to Q
[A-Q]->[A-Q]
- Digit from 0 to 7
[0-7]->[0-7]
Standards
What is the recommended way to write abnexes
- Use spaces between characters in character sets:
- Correct:
[w "_-"] - Incorrect:
[w"_-"]
- Correct:
- Put multiple exact characters between the same quotes in character sets:
- Correct:
["abc"] - Incorrect:
["a" "b" "c"], especially incorrect:["a""b""c"]
- Correct:
- Put spaces between groups:
- Correct:
{w} "." {w} - Incorrect:
{w}"."{w}
- Correct:
Examples:
Match for an email address:
- Regex:
[\w-\._]+@[\w-\.]+
- Abnex (following standards):
{[w "-._"]1++} "@" {[w "-."]1++}
- Abnex (not following standards):
{[w"-._"]1++}"@"{[w"-."]1++}
Functions (In Python)
Abnex has most functions from the re library, but it also has som extra functionality like: last() & contains().
Common functions between re and abnex
Regex on right after -> is the abnex equivalent
match()->match()findall()->all()split()->split()sub()->replace()subn()->replace_count()search()->first()
Special to abnex
holds(): whether or not a string matches an expression (bool).contains(): wheter or not a string contains a match (bool).last(): the last match in a string.
Metadata
Release files for abnex 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| abnex-1.0.2.tar.gz | 16.7 kB | Without provenance | Details for abnex-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| abnex-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for abnex-1.0.2-py3-none-any.whl |
Total release size: 44.8 kB
Release files / abnex-1.0.2.tar.gz
| Download URL | abnex-1.0.2.tar.gz |
|---|---|
| Size | 16.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa64afa5bf3f56a76c9ce82257b4fb682cf91c73975b2a0274c4be6c567669f0
|
|
BLAKE2b-256 checksum How to use checksums |
d24c7ae880b40146a03df4b13feb200f78d2374771457c46910d7b3428957aa0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.6 CPython/3.9.5 Darwin/20.5.0
|
Release files / abnex-1.0.2-py3-none-any.whl
| Download URL | abnex-1.0.2-py3-none-any.whl |
|---|---|
| Size | 28.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c7ba7ef1335f76253a14fddc4a57d960769049a8b4675855b7e2b2f1c711ced
|
|
BLAKE2b-256 checksum How to use checksums |
40c8ad98a93b1c9409e6128a0f49e64e1644195529749df551e02e31b5c94e81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.6 CPython/3.9.5 Darwin/20.5.0
|
Security for abnex 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.