¿’ +’ es igual ‘(a | b) +’ en el módulo de re de python?

Creo que pat1 = ‘[ab]’ y pat2 = ‘a | b’ tienen la misma función en el módulo Python (python2.7, windows) ‘re’ como patrón de expresión regular. Pero estoy confundido con ‘[ab] +’ y ‘(a | b) +’, si tienen la misma función, si no pueden explicar los detalles.

''' Created on 2012-9-4 @author: melo ''' import re pat1 = '(a|b)+' pat2 = '[ab]+' text = '22ababbbaa33aaa44b55bb66abaa77babab88' m1 = re.search(pat1, text) m2 = re.search(pat2, text) print 'search with pat1:', m1.group() print 'search with pat2:', m2.group() m11 = re.split(pat1, text) m22 = re.split(pat2, text) print 'split with pat1:', m11 print 'split with pat2:', m22 m111 = re.findall(pat1, text) m222 = re.findall(pat2, text) print 'findall with pat1:', m111 print 'findall with pat2:', m222 

salida como abajo:

 search with pat1: ababbbaa search with pat2: ababbbaa split with pat1: ['22', 'a', '33', 'a', '44', 'b', '55', 'b', '66', 'a', '77', 'b', '88'] split with pat2: ['22', '33', '44', '55', '66', '77', '88'] findall with pat1: ['a', 'a', 'b', 'b', 'a', 'b'] findall with pat2: ['ababbbaa', 'aaa', 'b', 'bb', 'abaa', 'babab'] 

¿Por qué son diferentes ‘pat1’ y ‘pat2’ y cuál es su diferencia? ¿Qué tipo de cadenas pueden ‘pat1’ coincidir?

Tienes un grupo de captura en el primer patrón.

Según los documentos ,

re.split ()
… Si se utilizan paréntesis de captura en el patrón , entonces el texto de todos los grupos en el patrón también se devuelve como parte de la lista resultante. …

Intente que el grupo no capture y vea si obtiene lo que espera:

 pat1 = '(?:a|b)+'