diff --git a/re-pcre/re.py b/re-pcre/re.py index 842e5c8a..7e832a65 100644 --- a/re-pcre/re.py +++ b/re-pcre/re.py @@ -96,6 +96,27 @@ class PCREPattern: res += repl s = s[end:] + def split(self, s, maxsplit=0): + res = [] + while True: + m = self.search(s) + g = None + if m: + g = m.group(0) + if not m or not g: + res.append(s) + return res + beg, end = m.span(0) + res.append(s[:beg]) + if m.num > 1: + res.extend(m.groups()) + s = s[end:] + if maxsplit > 0: + maxsplit -= 1 + if maxsplit == 0: + res.append(s) + return res + def compile(pattern, flags=0): errptr = bytes(4) @@ -120,6 +141,11 @@ def sub(pattern, repl, s, count=0, flags=0): return r.sub(repl, s) +def split(pattern, s, maxsplit=0, flags=0): + r = compile(pattern, flags) + return r.split(s, maxsplit) + + def escape(s): res = "" for c in s: diff --git a/re-pcre/setup.py b/re-pcre/setup.py index 6159abbc..665e9018 100644 --- a/re-pcre/setup.py +++ b/re-pcre/setup.py @@ -5,7 +5,7 @@ sys.path.pop(0) from distutils.core import setup setup(name='micropython-re-pcre', - version='0.1.5', + version='0.1.6', description='re module for MicroPython, based on PCRE and FFI', url='https://github.com/micropython/micropython/issues/405', author='Paul Sokolovsky', diff --git a/re-pcre/test_re.py b/re-pcre/test_re.py index 2789f073..7efe0c14 100644 --- a/re-pcre/test_re.py +++ b/re-pcre/test_re.py @@ -20,3 +20,11 @@ assert m.groups() == ('24', '1632') assert m.group(2, 1) == ('1632', '24') assert re.escape(r"1243*&[]_dsfAd") == r"1243\*\&\[\]_dsfAd" + +assert re.split('x*', 'foo') == ['foo'] +assert re.split("(?m)^$", "foo\n\nbar\n") == ["foo\n\nbar\n"] +assert re.split('\W+', 'Words, words, words.') == ['Words', 'words', 'words', ''] +assert re.split('(\W+)', 'Words, words, words.') == ['Words', ', ', 'words', ', ', 'words', '.', ''] +assert re.split('\W+', 'Words, words, words.', 1) == ['Words', 'words, words.'] +assert re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE) == ['0', '3', '9'] +assert re.split('(\W+)', '...words, words...') == ['', '...', 'words', ', ', 'words', '...', '']