@@ -244,6 +244,59 @@ def test_symbolic_groups(self):
244
244
self .checkPatternError (r'(?(-1))' , "bad character in group name '-1'" , 3 )
245
245
self .assertEqual (re .match (pat , 'xc8yz' ).span (), (0 , 5 ))
246
246
247
+ def test_re_split (self ):
248
+ for string in ":a:b::c" , S (":a:b::c" ):
249
+ self .assertTypedEqual (re .split (":" , string ),
250
+ ['' , 'a' , 'b' , '' , 'c' ])
251
+ self .assertTypedEqual (re .split (":+" , string ),
252
+ ['' , 'a' , 'b' , 'c' ])
253
+ self .assertTypedEqual (re .split ("(:+)" , string ),
254
+ ['' , ':' , 'a' , ':' , 'b' , '::' , 'c' ])
255
+ for string in (b":a:b::c" , B (b":a:b::c" ), bytearray (b":a:b::c" ),
256
+ memoryview (b":a:b::c" )):
257
+ self .assertTypedEqual (re .split (b":" , string ),
258
+ [b'' , b'a' , b'b' , b'' , b'c' ])
259
+ self .assertTypedEqual (re .split (b":+" , string ),
260
+ [b'' , b'a' , b'b' , b'c' ])
261
+ self .assertTypedEqual (re .split (b"(:+)" , string ),
262
+ [b'' , b':' , b'a' , b':' , b'b' , b'::' , b'c' ])
263
+ for a , b , c in ("\xe0 \xdf \xe7 " , "\u0430 \u0431 \u0432 " ,
264
+ "\U0001d49c \U0001d49e \U0001d4b5 " ):
265
+ string = ":%s:%s::%s" % (a , b , c )
266
+ self .assertEqual (re .split (":" , string ), ['' , a , b , '' , c ])
267
+ self .assertEqual (re .split (":+" , string ), ['' , a , b , c ])
268
+ self .assertEqual (re .split ("(:+)" , string ),
269
+ ['' , ':' , a , ':' , b , '::' , c ])
270
+
271
+ self .assertEqual (re .split ("(?::+)" , ":a:b::c" ), ['' , 'a' , 'b' , 'c' ])
272
+ self .assertEqual (re .split ("(:)+" , ":a:b::c" ),
273
+ ['' , ':' , 'a' , ':' , 'b' , ':' , 'c' ])
274
+ self .assertEqual (re .split ("([b:]+)" , ":a:b::c" ),
275
+ ['' , ':' , 'a' , ':b::' , 'c' ])
276
+ self .assertEqual (re .split ("(b)|(:+)" , ":a:b::c" ),
277
+ ['' , None , ':' , 'a' , None , ':' , '' , 'b' , None , '' ,
278
+ None , '::' , 'c' ])
279
+ self .assertEqual (re .split ("(?:b)|(?::+)" , ":a:b::c" ),
280
+ ['' , 'a' , '' , '' , 'c' ])
281
+
282
+ for sep , expected in [
283
+ (':*' , ['' , 'a' , 'b' , 'c' ]),
284
+ ('(?::*)' , ['' , 'a' , 'b' , 'c' ]),
285
+ ('(:*)' , ['' , ':' , 'a' , ':' , 'b' , '::' , 'c' ]),
286
+ ('(:)*' , ['' , ':' , 'a' , ':' , 'b' , ':' , 'c' ]),
287
+ ]:
288
+ with self .subTest (sep = sep ), self .assertWarns (FutureWarning ):
289
+ self .assertTypedEqual (re .split (sep , ':a:b::c' ), expected )
290
+
291
+ for sep , expected in [
292
+ ('' , [':a:b::c' ]),
293
+ (r'\b' , [':a:b::c' ]),
294
+ (r'(?=:)' , [':a:b::c' ]),
295
+ (r'(?<=:)' , [':a:b::c' ]),
296
+ ]:
297
+ with self .subTest (sep = sep ), self .assertRaises (ValueError ):
298
+ self .assertTypedEqual (re .split (sep , ':a:b::c' ), expected )
299
+
247
300
def test_ignore_case_set (self ):
248
301
self .assertTrue (re .match (r'[19A]' , 'A' , re .I ))
249
302
self .assertTrue (re .match (r'[19a]' , 'a' , re .I ))
0 commit comments