supe que []
denota un conjunto de caracteres permitidos -diferencia b/w [ab] y (a | b) en la coincidencia de expresiones regulares?
>>> p = r'^[ab]$'
>>>
>>> re.search(p, '')
>>> re.search(p, 'a')
<_sre.SRE_Match object at 0x1004823d8>
>>> re.search(p, 'b')
<_sre.SRE_Match object at 0x100482370>
>>> re.search(p, 'ab')
>>> re.search(p, 'ba')
Pero ... hoy me encontré con una expresión con barras verticales dentro de paréntesis para definir patrones mutuamente excluyentes -
>>> q = r'^(a|b)$'
>>>
>>> re.search(q, '')
>>> re.search(q, 'a')
<_sre.SRE_Match object at 0x100498dc8>
>>> re.search(q, 'b')
<_sre.SRE_Match object at 0x100498e40>
>>> re.search(q, 'ab')
>>> re.search(q, 'ba')
Esto parece imitar la misma funcionalidad que la anterior, ¿o me falta algo?
PD: En el Python
, los paréntesis mismos se usan para definir grupos lógicos de texto coincidente. Si utilizo la segunda técnica, ¿cómo uso paréntesis para ambos trabajos?
No estoy seguro de lo que quiere decir con el bit paréntesis ... –
Sí, estás en lo correcto - '[ab]' y '(una | b) 'ambos coinciden _exactamente_ lo mismo (pero el primero coincidirá más rápido). Las expresiones regulares son un lenguaje en sí mismas (ya sea que las encuentres en Python o Perl) y necesitas aprender su sintaxis (críptica) si planeas usarlas efectivamente. (Por ejemplo, paréntesis dentro de una expresión regular no son lo mismo que paréntesis fuera de la expresión regular). Recomiendo seguir el tutorial en [regular-expressions.info] (http://www.regular-expressions.info). Cualquier tiempo pasado allí será recompensado muchas veces. – ridgerunner