¿Expresión regular que no distingue entre mayúsculas y minúsculas sin volver a compilar?
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 i
al sufijo de Perl (por ejemplo m/test/i
) en la documentación.
Aceptado
Pase re.IGNORECASE
al flags
pará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)
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'
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']
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)