Skip to content

Commit

Permalink
restructured
Browse files Browse the repository at this point in the history
--HG--
rename : range_regex.py => range_regex/range_regex.py
rename : tests.py => range_regex/tests.py
  • Loading branch information
voronind committed Jul 9, 2013
1 parent 3bcdc42 commit afda504
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 9 deletions.
20 changes: 15 additions & 5 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,21 +1,31 @@
The nicest numeric range regular expression generator
Python numeric range regular expression generator
=========================

Another like modules generates incorrect or excessive patterns.
Another like packages generates incorrect or excessive patterns.

Installation
=========================
::

git clone git://github.com/dimka665/range-regex.git
pip install range-regex

or

::

git clone git://github.com/dimka665/range-regex.git

Usage
=========================
::

from range_regex import regex_for_range
from range_regex import bounded_regex_for_range

regex_for_range(12, 34)
bounded_regex_for_range(12, 34)

generates

generates ``"1[2-9]|2\d|3[0-4]"``
"1[2-9]|2\d|3[0-4]"
"\b(1[2-9]|2\d|3[0-4])\b"
3 changes: 3 additions & 0 deletions range_regex/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
__author__ = 'dimka'

from .range_regex import range_to_pattern, bounded_regex_for_range
7 changes: 4 additions & 3 deletions range_regex.py → range_regex/range_regex.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@
# 300-339: 3[0-3]\d
# 340-345: 34[0-5]


def bounded_regex_for_range(min_, max_):
return r'\b({})\b'.format(regex_for_range(min_, max_))


def regex_for_range(min_, max_):
"""
>>> regex_for_range(12, 345)
'1[2-9]|[2-9]\\\\d|[1-2]\\\\d{2}|3[0-3]\\\\d|34[0-5]'
> regex_for_range(12, 345)
'1[2-9]|[2-9]\d|[1-2]\d{2}|3[0-3]\d|34[0-5]'
"""
subpatterns = []

Expand All @@ -29,7 +30,7 @@ def regex_for_range(min_, max_):


def split_to_ranges(min_, max_):
stops = set([max_])
stops = {max_}

nines_count = 1
stop = fill_by_nines(min_, nines_count)
Expand Down
7 changes: 6 additions & 1 deletion tests.py → range_regex/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

class RegexForRangeTest(unittest.TestCase):
def _verify_range(self, regex, min_, max_, from_min_, to_max_):
for nr in xrange(from_min_, to_max_ + 1):
for nr in range(from_min_, to_max_ + 1):
if min_ <= nr <= max_:
self.assertRegexpMatches(str(nr), regex)
else:
Expand All @@ -23,6 +23,11 @@ def test_equal_2(self):
regex = bounded_regex_for_range(65443, 65443)
self._verify_range(regex, 65443, 65443, 65000, 66000)

def test_equal_3(self):
regex = bounded_regex_for_range(192, 100020000300000)
self._verify_range(regex, 192, 1000, 0, 1000)
self._verify_range(regex, 100019999300000, 100020000300000, 100019999300000, 100020000400000)

def test_repeated_digit(self):
regex = bounded_regex_for_range(10331, 20381)
self._verify_range(regex, 10331, 20381, 0, 99999)
Expand Down
25 changes: 25 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from distutils.core import setup

long_description = open('README.rst').read()

setup(
name='range-regex',
version='1.0',
description='Python numeric range regular expression generator',
long_description=long_description,
url='http://github.com/dimka665/range-ragex',
author='Dmitry Voronin',
author_email='[email protected]',
license='Python Software Foundation License',
packages=['range_regex'],
platforms=['any'],
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'License :: OSI Approved :: Python Software Foundation License',
'Natural Language :: English',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Environment :: Web Environment',
],
)

0 comments on commit afda504

Please sign in to comment.