From afda50442e9a0c6b55cd8b2d667f6398e3d01216 Mon Sep 17 00:00:00 2001 From: dimka665 Date: Tue, 9 Jul 2013 04:39:13 +0400 Subject: [PATCH] restructured --HG-- rename : range_regex.py => range_regex/range_regex.py rename : tests.py => range_regex/tests.py --- README.rst | 20 ++++++++++++---- range_regex/__init__.py | 3 +++ range_regex.py => range_regex/range_regex.py | 7 +++--- tests.py => range_regex/tests.py | 7 +++++- setup.py | 25 ++++++++++++++++++++ 5 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 range_regex/__init__.py rename range_regex.py => range_regex/range_regex.py (90%) rename tests.py => range_regex/tests.py (89%) create mode 100644 setup.py diff --git a/README.rst b/README.rst index e41ba31..f7ff7cf 100644 --- a/README.rst +++ b/README.rst @@ -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" diff --git a/range_regex/__init__.py b/range_regex/__init__.py new file mode 100644 index 0000000..118a678 --- /dev/null +++ b/range_regex/__init__.py @@ -0,0 +1,3 @@ +__author__ = 'dimka' + +from .range_regex import range_to_pattern, bounded_regex_for_range \ No newline at end of file diff --git a/range_regex.py b/range_regex/range_regex.py similarity index 90% rename from range_regex.py rename to range_regex/range_regex.py index 05ca7c5..e351988 100644 --- a/range_regex.py +++ b/range_regex/range_regex.py @@ -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 = [] @@ -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) diff --git a/tests.py b/range_regex/tests.py similarity index 89% rename from tests.py rename to range_regex/tests.py index 017323d..d2ec5be 100644 --- a/tests.py +++ b/range_regex/tests.py @@ -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: @@ -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) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..88d310f --- /dev/null +++ b/setup.py @@ -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='dimka665@gmail.com', + 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', + ], +) \ No newline at end of file