Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: py3.6
Changeset: r93460:0e57c6df8538
Date: 2017-12-17 19:34 +0100
http://bitbucket.org/pypy/pypy/changeset/0e57c6df8538/

Log:    CPython Issue #24454: Regular expression match object groups are now
        accessible using __getitem__. "mo[x]" is equivalent to
        "mo.group(x)".

diff --git a/pypy/module/_sre/interp_sre.py b/pypy/module/_sre/interp_sre.py
--- a/pypy/module/_sre/interp_sre.py
+++ b/pypy/module/_sre/interp_sre.py
@@ -533,6 +533,10 @@
         space = self.space
         raise oefmt(space.w_TypeError, "cannot copy this match object")
 
+    def descr_getitem(self, space, w_index):
+        start, end = self.do_span(w_index)
+        return slice_w(space, self.ctx, start, end, space.w_None)
+
     @jit.look_inside_iff(lambda self, args_w: jit.isconstant(len(args_w)))
     def group_w(self, args_w):
         space = self.space
@@ -684,6 +688,8 @@
     __copy__     = interp2app(W_SRE_Match.cannot_copy_w),
     __deepcopy__ = interp2app(W_SRE_Match.cannot_copy_w),
     __repr__     = interp2app(W_SRE_Match.repr_w),
+    __getitem__  = interp2app(W_SRE_Match.descr_getitem),
+    #
     group        = interp2app(W_SRE_Match.group_w),
     groups       = interp2app(W_SRE_Match.groups_w),
     groupdict    = interp2app(W_SRE_Match.groupdict_w),
diff --git a/pypy/module/_sre/test/test_app_sre.py 
b/pypy/module/_sre/test/test_app_sre.py
--- a/pypy/module/_sre/test/test_app_sre.py
+++ b/pypy/module/_sre/test/test_app_sre.py
@@ -236,6 +236,10 @@
                 return self.value
         assert re.match("(foo)", "foo").group(Index(1)) == "foo"
 
+    def test_getitem(self):
+        import re
+        assert re.match("(foo)bar", "foobar")[1] == "foo"
+
     def test_expand(self):
         import re
         m = re.search("a(..)(?P<name>..)", "ab1bc")
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to