Irregular methods on regular expressions
Go to file
asciimoo 81a3c5796d [doc] easy_install from pypi 2012-09-23 23:26:10 +02:00
doc [enh] sphinx documentation config added 2012-07-05 12:33:33 +02:00
.gitignore [enh] Initial commit 2012-05-27 13:13:45 +02:00
README.markdown [doc] easy_install from pypi 2012-09-23 23:26:10 +02:00
exrex.py [enh] random/getone feature added ++ moar tests 2012-09-23 22:50:44 +02:00
setup.py [enh][doc] setup/readme updates 2012-09-23 23:19:48 +02:00
tests.py [enh] random/getone feature added ++ moar tests 2012-09-23 22:50:44 +02:00

README.markdown

EXREX

Description

Exrex is a command line tool and python module that generates all - or random - matching strings to a given regular expression. It is pure python, without external dependencies.

There are regular expressions with infinite matching strings (eg.: [a-z]+), in these cases exrex limits the maximum length of the infinite parts (default to 20).

Documentation

http://exrex.readthedocs.org/en/latest/

Install

easy_install exrex

Command line usage

> python -m exrex --help
usage: exrex.py [-h] [-o FILE] [-l] [-d DELIMITER] [-v] REGEX

exrex - regular expression string generator

positional arguments:
  REGEX                 REGEX string

optional arguments:
  -h, --help            show this help message and exit
  -o FILE, --output FILE
                        Output file - default is STDOUT
  -l, --limit           Max limit for range size - default is 20
  -c, --count           Count matching strings
  -r, --random          Returns a random string that matches to the regex
  -d DELIMITER, --delimiter DELIMITER
                        Delimiter - default is \n
  -v, --verbose         Verbose mode

Examples:

$ python -m exrex '[asdfg]'
a
s
d
f
g
$ python -m exrex '[01]{10}' -c
1024

Using as python module

Examples:

>>> import exrex
>>> [x for x in exrex.generate('((hai){2}|world)!')]
['haihai!', 'world!']
>>> exrex.getone('\d{4}-\d{4}-\d{4}-[0-9]{4}')
'3096-7886-2834-5671'
>>> exrex.count('[01]{0,9}')
1023
>>> list(exrex.generate('[ab]{1,3}'))
['a', 'b', 'aa', 'ab', 'ba', 'bb', 'aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']
>>> print '\n'.join(exrex.generate('This is (a (code|cake|test)|an (apple|elf|output))\.'))
This is a code.
This is a cake.
This is a test.
This is an apple.
This is an elf.
This is an output.

TODO

  • Python3 compatibility (30%) - not works
  • Command line switches to change default character sets/ranges/range limits (eg. for '.','\s'..) (40%)
  • Count the number of matching strings (90%)
  • Memory usage reduction (100%) - fully generatorized

License

exrex is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

exrex is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with exrex. If not, see < http://www.gnu.org/licenses/ >.

(C) 2012- by Adam Tauber, <asciimoo@gmail.com>

Fun/arts

  • Boat: python -m exrex '( {20}(\| *\\|-{22}|\|)|={50}|( ){0,5}\\\.| {11}~{39})'

Profiling

  • python -m cProfile exrex.py '[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]' -o /dev/null
  • python -m cProfile exrex.py '[0-9]{6}' -o /dev/null