瀏覽代碼

added ioex.reex.rename_groups

Fabian Peter Hammerle 8 年之前
父節點
當前提交
4841e9f9ce
共有 3 個文件被更改,包括 26 次插入2 次删除
  1. 11 0
      ioex/reex.py
  2. 2 2
      setup.py
  3. 13 0
      tests/reex/test_rename_groups.py

+ 11 - 0
ioex/reex.py

@@ -0,0 +1,11 @@
+import re
+
+
+def rename_groups(pattern, name_repl):
+    def pattern_repl(match):
+        return '(?P<{}>'.format(name_repl(match.group(1)))
+    return re.sub(
+        r'\(\?P<(.*?)>',
+        pattern_repl,
+        pattern,
+    )

+ 2 - 2
setup.py

@@ -5,12 +5,12 @@ import glob
 setup(
     name = 'ioex',
     packages = ['ioex'],
-    version = '0.11.0',
+    version = '0.12.0',
     description = 'extension for python\'s build-in input / output interface',
     author = 'Fabian Peter Hammerle',
     author_email = 'fabian.hammerle@gmail.com',
     url = 'https://github.com/fphammerle/ioex',
-    download_url = 'https://github.com/fphammerle/ioex/tarball/0.11.0',
+    download_url = 'https://github.com/fphammerle/ioex/tarball/0.12.0',
     keywords = [],
     classifiers = [],
     scripts = glob.glob('scripts/*'),

+ 13 - 0
tests/reex/test_rename_groups.py

@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+import pytest
+
+import ioex.reex
+
+
+@pytest.mark.parametrize(('source', 'repl', 'expected'), [
+    ['(?P<a>a)', lambda n: n.upper(), '(?P<A>a)'],
+    ['(?P<a>a(?P<a1>1))', lambda n: n.upper(), '(?P<A>a(?P<A1>1))'],
+    ['(?P<a>a)(?P<b>b)', lambda n: n.upper(), '(?P<A>a)(?P<B>b)'],
+])
+def test_rename_groups(source, repl, expected):
+    assert expected == ioex.reex.rename_groups(source, repl)