- experimental: added two new attributes to the match object:
  "lastgroup" is the name of the last matched capturing group,
  "lastindex" is the index of the same group.  if no group was
  matched, both attributes are set to None.

  the (?P#) feature will be removed in the next relase.
diff --git a/Modules/_sre.c b/Modules/_sre.c
index e11a892..d6f050e 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -1104,9 +1104,10 @@
 	PyObject* code;
 	int groups = 0;
 	PyObject* groupindex = NULL;
-	if (!PyArg_ParseTuple(args, "OiO!|iO", &pattern, &flags,
+    PyObject* indexgroup = NULL;
+	if (!PyArg_ParseTuple(args, "OiO!|iOO", &pattern, &flags,
                           &PyString_Type, &code,
-                          &groups, &groupindex))
+                          &groups, &groupindex, &indexgroup))
 		return NULL;
 
 	self = PyObject_NEW(PatternObject, &Pattern_Type);
@@ -1127,6 +1128,9 @@
 	Py_XINCREF(groupindex);
 	self->groupindex = groupindex;
 
+	Py_XINCREF(indexgroup);
+	self->indexgroup = indexgroup;
+
 	return (PyObject*) self;
 }
 
@@ -1883,7 +1887,28 @@
 
 	PyErr_Clear();
 
-	/* attributes */
+	if (!strcmp(name, "lastindex")) {
+        /* experimental */
+        if (self->index >= 0)
+            return Py_BuildValue("i", self->index);
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    if (!strcmp(name, "lastgroup")) {
+        /* experimental */
+        if (self->pattern->indexgroup) {
+            PyObject* result = PySequence_GetItem(
+                self->pattern->indexgroup, self->index
+                );
+            if (result)
+                return result;
+            PyErr_Clear();
+        }
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
 	if (!strcmp(name, "string")) {
         Py_INCREF(self->string);
 		return self->string;
@@ -1900,15 +1925,6 @@
 	if (!strcmp(name, "endpos"))
 		return Py_BuildValue("i", 0); /* FIXME */
 
-	if (!strcmp(name, "index")) {
-        /* experimental */
-        if (self->index < 0) {
-            Py_INCREF(Py_None);
-            return Py_None;
-        } else
-            return Py_BuildValue("i", self->index);
-    }
-
 	PyErr_SetString(PyExc_AttributeError, name);
 	return NULL;
 }
diff --git a/Modules/sre.h b/Modules/sre.h
index 7e7d835..f66d608 100644
--- a/Modules/sre.h
+++ b/Modules/sre.h
@@ -21,6 +21,7 @@
     PyObject* code; /* link to the code string object */
     int groups;
     PyObject* groupindex;
+    PyObject* indexgroup;
     /* compatibility */
     PyObject* pattern; /* pattern source (or None) */
     int flags; /* flags used when compiling pattern source */