Metadata-Version: 2.4
Name: exrex
Version: 0.12.0
Summary: Irregular methods for regular expressions
Home-page: https://github.com/asciimoo/exrex
Download-URL: https://github.com/asciimoo/exrex/tarball/master
Author: Adam Tauber
Author-email: asciimoo@gmail.com
License: AGPLv3+
Keywords: regexp generators string generation regex simplification
Classifier: Development Status :: 4 - Beta
Classifier: Topic :: Utilities
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Description-Content-Type: text/markdown
License-File: COPYING
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: download-url
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: summary


EXREX
=====

Irregular methods for regular expressions.

Exrex is a command line tool and python module that generates all - or random - matching strings to a given regular expression and more.
It's 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.

Exrex uses generators, so the memory usage does not depend on the number of matching strings.

[![Version](https://img.shields.io/pypi/v/exrex.svg)](https://crate.io/packages/exrex/)   [![Downloads](https://img.shields.io/pypi/dm/exrex.svg)](https://crate.io/packages/exrex/)

*Features*

 * Generating all matching strings
 * Generating a random matching string
 * Counting the number of matching strings
 * Simplification of regular expressions


### Installation


To install exrex, simply:

```bash
$ pip install exrex
```

or

```bash
$ easy_install exrex
```


Usage
=====

### as python module

```python
>>> import exrex

>>> exrex.getone('(ex)r\\1')
'exrex'

>>> list(exrex.generate('((hai){2}|world!)'))
['haihai', 'world!']

>>> exrex.getone('\d{4}-\d{4}-\d{4}-[0-9]{4}')
'3096-7886-2834-5671'

>>> exrex.getone('(1[0-2]|0[1-9])(:[0-5]\d){2} (A|P)M')
'09:31:40 AM'

>>> exrex.count('[01]{0,9}')
1023

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

>>> print exrex.simplify('(ab|ac|ad)')
(a[bcd])
```

### Command line usage

```
> 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 N, --limit N       Max limit for range size - default is 20
  -c, --count           Count matching strings
  -m N, --max-number N  Max number of strings - default is -1
  -r, --random          Returns a random string that matches to the regex
  -s, --simplify        Simplifies a regular expression
  -d DELIMITER, --delimiter DELIMITER
                        Delimiter - default is \n
  -v, --verbose         Verbose mode
```

Examples:

```
$ exrex '[asdfg]'
a
s
d
f
g

$ exrex -r '(0[1-9]|1[012])-\d{2}'
09-85

$ exrex '[01]{10}' -c
1024

```

### Bugs

Bugs or suggestions? Visit the [issue tracker](https://github.com/asciimoo/exrex/issues).


### Documentation

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

### TODO

 * Command line switches to change default character sets/ranges/range limits (eg. for '.','\s'..) (40%)
 * Extend categories (`re.sre_parse.CATEGORIES`) (30%)
 * Improve setup.py
 * More verbose code
 * Documentation
 * Optimizations
 * Generation of `n` different random matching string
 * Memory usage reduction (100%?) - generators
 * Count the number of matching strings - (100%?)
 * Unicode support (100%)
 * Handle grouprefs (100%)
 * Python3 compatibility (100%) ( >= python3.3)


### 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: `exrex '( {20}(\| *\\|-{22}|\|)|\.={50}| (  ){0,5}\\\.| {12}~{39})'`
 * Eyes: `exrex '(o|O|0)(_)(o|O|0)'`

### Similar projects

Tools that generate a list of all possible strings that match a given pattern:
* [regldg](http://regldg.com/)
  (features a live demo on the website)
* [regex-genex](https://github.com/audreyt/regex-genex)
  (supports using multiple regex patterns simultaneously)

Tools that generate random strings, one by one, that match a given pattern:
* [randexp.js](http://fent.github.com/randexp.js/)
  (features several live demos on the website)
* [rstr.xeger](https://bitbucket.org/leapfrogdevelopment/rstr/src#rst-header-xeger)
  (a method of the `rstr` Python module)

### 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`
