summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorEric V. Smith <eric@trueblade.com>2016-09-11 12:55:43 (GMT)
committerEric V. Smith <eric@trueblade.com>2016-09-11 12:55:43 (GMT)
commit605bdae0780a1ff8a88b80e6e67f3f355fb2ddb4 (patch)
tree2bb1f4625ba02d82fec908d179535a2d8147f73a /Lib
parenta3c1728bb6641208a9e253af4ffeda23bc464bbe (diff)
downloadcpython-605bdae0780a1ff8a88b80e6e67f3f355fb2ddb4.zip
cpython-605bdae0780a1ff8a88b80e6e67f3f355fb2ddb4.tar.gz
cpython-605bdae0780a1ff8a88b80e6e67f3f355fb2ddb4.tar.bz2
Issue 24454: Improve the usability of the re match object named group API
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_re.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 79a7a05..eb1aba3 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -441,6 +441,50 @@ class ReTests(unittest.TestCase):
self.assertEqual(m.group(2, 1), ('b', 'a'))
self.assertEqual(m.group(Index(2), Index(1)), ('b', 'a'))
+ def test_match_getitem(self):
+ pat = re.compile('(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?')
+
+ m = pat.match('a')
+ self.assertEqual(m['a1'], 'a')
+ self.assertEqual(m['b2'], None)
+ self.assertEqual(m['c3'], None)
+ self.assertEqual('a1={a1} b2={b2} c3={c3}'.format_map(m), 'a1=a b2=None c3=None')
+ self.assertEqual(m[0], 'a')
+ self.assertEqual(m[1], 'a')
+ self.assertEqual(m[2], None)
+ self.assertEqual(m[3], None)
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m['X']
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m[-1]
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m[4]
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m[0, 1]
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m[(0,)]
+ with self.assertRaisesRegex(IndexError, 'no such group'):
+ m[(0, 1)]
+ with self.assertRaisesRegex(KeyError, 'a2'):
+ 'a1={a2}'.format_map(m)
+
+ m = pat.match('ac')
+ self.assertEqual(m['a1'], 'a')
+ self.assertEqual(m['b2'], None)
+ self.assertEqual(m['c3'], 'c')
+ self.assertEqual('a1={a1} b2={b2} c3={c3}'.format_map(m), 'a1=a b2=None c3=c')
+ self.assertEqual(m[0], 'ac')
+ self.assertEqual(m[1], 'a')
+ self.assertEqual(m[2], None)
+ self.assertEqual(m[3], 'c')
+
+ # Cannot assign.
+ with self.assertRaises(TypeError):
+ m[0] = 1
+
+ # No len().
+ self.assertRaises(TypeError, len, m)
+
def test_re_fullmatch(self):
# Issue 16203: Proposal: add re.fullmatch() method.
self.assertEqual(re.fullmatch(r"a", "a").span(), (0, 1))