]> granicus.if.org Git - python/commitdiff
Issue #17087: Improved the repr for regular expression match objects.
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 20 Oct 2013 10:13:31 +0000 (13:13 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 20 Oct 2013 10:13:31 +0000 (13:13 +0300)
Lib/test/test_re.py
Misc/NEWS
Modules/_sre.c

index 20b1a1488dc00824b413057dc29c84b680a3fd3f..841d3a38c53639e899f6d374a059ac45912a944c 100644 (file)
@@ -1104,6 +1104,28 @@ class ReTests(unittest.TestCase):
                 self.assertEqual(re.compile(pattern, re.S).findall(b'xyz'),
                                  [b'xyz'], msg=pattern)
 
+    def test_match_repr(self):
+        for string in '[abracadabra]', S('[abracadabra]'):
+            m = re.search(r'(.+)(.*?)\1', string)
+            self.assertEqual(repr(m), "<%s.%s object; "
+                             "span=(1, 12), match='abracadabra'>" %
+                             (type(m).__module__, type(m).__qualname__))
+        for string in (b'[abracadabra]', B(b'[abracadabra]'),
+                       bytearray(b'[abracadabra]'),
+                       memoryview(b'[abracadabra]')):
+            m = re.search(rb'(.+)(.*?)\1', string)
+            self.assertEqual(repr(m), "<%s.%s object; "
+                             "span=(1, 12), match=b'abracadabra'>" %
+                             (type(m).__module__, type(m).__qualname__))
+
+        first, second = list(re.finditer("(aa)|(bb)", "aa bb"))
+        self.assertEqual(repr(first), "<%s.%s object; "
+                         "span=(0, 2), match='aa'>" %
+                         (type(second).__module__, type(first).__qualname__))
+        self.assertEqual(repr(second), "<%s.%s object; "
+                         "span=(3, 5), match='bb'>" %
+                         (type(second).__module__, type(second).__qualname__))
+
 
     def test_bug_2537(self):
         # issue 2537: empty submatches
index 5d4ac7504aac5da53853226fa8a86c48e0f43bf3..ca2acf527f2fd7dda7d5081c861a69d5daadf836 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -62,6 +62,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #17087: Improved the repr for regular expression match objects.
+
 - Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX.
   Patch by David Edelsohn.
 
index 0db4ebed71980f6c442dbc514f6da1fc9a880f5e..84330ef71521f74ccf9420ab3a2545abb43b659b 100644 (file)
@@ -3637,6 +3637,22 @@ match_regs_get(MatchObject *self)
         return match_regs(self);
 }
 
+static PyObject *
+match_repr(MatchObject *self)
+{
+    PyObject *result;
+    PyObject *group0 = match_getslice_by_index(self, 0, Py_None);
+    if (group0 == NULL)
+        return NULL;
+    result = PyUnicode_FromFormat(
+            "<%s object; span=(%d, %d), match=%.50R>",
+            Py_TYPE(self)->tp_name,
+            self->mark[0], self->mark[1], group0);
+    Py_DECREF(group0);
+    return result;
+}
+
+
 static PyGetSetDef match_getset[] = {
     {"lastindex", (getter)match_lastindex_get, (setter)NULL},
     {"lastgroup", (getter)match_lastgroup_get, (setter)NULL},
@@ -3665,7 +3681,7 @@ static PyTypeObject Match_Type = {
     0,                          /* tp_getattr */
     0,                          /* tp_setattr */
     0,                          /* tp_reserved */
-    0,                          /* tp_repr */
+    (reprfunc)match_repr,       /* tp_repr */
     0,                          /* tp_as_number */
     0,                          /* tp_as_sequence */
     0,                          /* tp_as_mapping */