Index: django/core/urlresolvers.py
===================================================================
--- django/core/urlresolvers.py	(revision 8695)
+++ django/core/urlresolvers.py	(working copy)
@@ -209,6 +209,19 @@
     def reverse_helper(self, *args, **kwargs):
         return reverse_helper(self.regex, *args, **kwargs)
 
+    def args_schemas(self):
+        named_args = []
+        positional_args = 0
+        for m in re.findall(r'\((?:\?P<(\w+)>)?[^)]+\)', self.regex.pattern, re.UNICODE):
+            if m:
+                named_args.append(m)
+            else:
+                positional_args += 1
+        return [
+            tuple([positional_args] + sorted(named_args)),
+            (positional_args+len(named_args),)
+        ]
+
 class RegexURLResolver(object):
     def __init__(self, regex, urlconf_name, default_kwargs=None):
         # regex is a string representing a regular expression.
@@ -231,6 +244,9 @@
                 else:
                     self._reverse_dict[pattern.callback] = (pattern,)
                     self._reverse_dict[pattern.name] = (pattern,)
+                    for args_schema in pattern.args_schemas():
+                        self._reverse_dict[pattern.callback, args_schema] = (pattern,)
+                        self._reverse_dict[pattern.name, args_schema] = (pattern,)
         return self._reverse_dict
     reverse_dict = property(_get_reverse_dict)
 
@@ -285,8 +301,10 @@
             lookup_view = get_callable(lookup_view, True)
         except (ImportError, AttributeError), e:
             raise NoReverseMatch("Error importing '%s': %s." % (lookup_view, e))
-        if lookup_view in self.reverse_dict:
-            return u''.join([reverse_helper(part.regex, *args, **kwargs) for part in self.reverse_dict[lookup_view]])
+        args_schema = tuple([len(args)] + sorted(kwargs.keys()))
+        for key in ((lookup_view,args_schema), lookup_view):
+            if key in self.reverse_dict:
+                return u''.join([reverse_helper(part.regex, *args, **kwargs) for part in self.reverse_dict[key]])
         raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword "
                 "arguments '%s' not found." % (lookup_view, args, kwargs))
 
