Author: Amaury Forgeot d'Arc <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit