Issue 1519638: Now unmatched groups are replaced with empty strings in re.sub()
and re.subn().
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index b9a1852..063d1b7 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -880,14 +880,12 @@
 
 def expand_template(template, match):
     g = match.group
-    sep = match.string[:0]
+    empty = match.string[:0]
     groups, literals = template
     literals = literals[:]
     try:
         for index, group in groups:
-            literals[index] = s = g(group)
-            if s is None:
-                raise error("unmatched group")
+            literals[index] = g(group) or empty
     except IndexError:
         raise error("invalid group reference")
-    return sep.join(literals)
+    return empty.join(literals)
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index e5ad6cb..0e4fa88 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -225,9 +225,11 @@
         self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<a a>', 'xx')
         self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<>', 'xx')
         self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<1a1>', 'xx')
+        self.assertRaises(re.error, re.sub, '(?P<a>x)', r'\g<2>', 'xx')
+        self.assertRaises(re.error, re.sub, '(?P<a>x)', r'\2', 'xx')
         self.assertRaises(IndexError, re.sub, '(?P<a>x)', '\g<ab>', 'xx')
-        self.assertRaises(re.error, re.sub, '(?P<a>x)|(?P<b>y)', '\g<b>', 'xx')
-        self.assertRaises(re.error, re.sub, '(?P<a>x)|(?P<b>y)', '\\2', 'xx')
+        self.assertEqual(re.sub('(?P<a>x)|(?P<b>y)', r'\g<b>', 'xx'), '')
+        self.assertEqual(re.sub('(?P<a>x)|(?P<b>y)', r'\2', 'xx'), '')
         self.assertRaises(re.error, re.sub, '(?P<a>x)', '\g<-1>', 'xx')
         # New valid/invalid identifiers in Python 3
         self.assertEqual(re.sub('(?P<µ>x)', r'\g<µ>', 'xx'), 'xx')
@@ -439,6 +441,10 @@
                                   "first second")
                                   .expand(r"\2 \1 \g<second> \g<first>"),
                          "second first second first")
+        self.assertEqual(re.match("(?P<first>first)|(?P<second>second)",
+                                  "first")
+                                  .expand(r"\2 \g<second>"),
+                         " ")
 
     def test_repeat_minmax(self):
         self.assertIsNone(re.match("^(\w){1}$", "abc"))