¿Expresión regular que no distingue entre mayúsculas y minúsculas sin volver a compilar?

Resuelto Mat asked hace 15 años • 11 respuestas

En Python, puedo compilar una expresión regular para que no distinga entre mayúsculas y minúsculas usando re.compile:

>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>> 
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>

¿Hay alguna manera de hacer lo mismo, pero sin usar re.compile. No puedo encontrar nada parecido ial sufijo de Perl (por ejemplo m/test/i) en la documentación.

Mat avatar Feb 01 '09 20:02 Mat
Aceptado

Pase re.IGNORECASEal flagsparámetro de search, match, o sub:

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE)
Michael Haren avatar Feb 01 '2009 14:02 Michael Haren

También puede realizar búsquedas que no distingan entre mayúsculas y minúsculas usando búsqueda/coincidencia sin el indicador IGNORECASE (probado en Python 2.7.3):

re.search(r'(?i)test', 'TeSt').group()    ## returns 'TeSt'
re.match(r'(?i)test', 'TeSt').group()     ## returns 'TeSt'
aem999 avatar May 04 '2012 07:05 aem999

El marcador que no distingue entre mayúsculas y minúsculas (?i)se puede incorporar directamente en el patrón de expresiones regulares:

>>> import re
>>> s = 'This is one Test, another TEST, and another test.'
>>> re.findall('(?i)test', s)
['Test', 'TEST', 'test']
Raymond Hettinger avatar Feb 23 '2017 03:02 Raymond Hettinger

También puede definir que no se distinga entre mayúsculas y minúsculas durante la compilación del patrón:

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE)
panofish avatar May 12 '2014 15:05 panofish