2009-02-01 15 views
193

En Python, puede compilar una expresión regular para ser sensible a las mayúsculas utilizando re.compile:Caso insensible expresión regular Python sin 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 una manera de hacer lo mismo, pero sin utilizar re.compile. No puedo encontrar nada como el sufijo i de Perl (por ejemplo, m/test/i) en la documentación.

+0

puede encontrar una excelente introducción a experssoins regulares en: http://www.python-course.eu/re.php – 2Obe

Respuesta

322

Pass re.IGNORECASE a la 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) 
+0

@ericso 's camino es bueno. y es simple y funciona –

+0

're.match ('test', 'TeSt', re.IGNORECASE)' podría llevar a 'TypeError' cuando cualquiera de los atributos sea' None'. Usando 'try & except' para capturar la coincidencia' TypeError' por first_string == second_string. ** ** Código de ejemplo 'def equal_ignore_case (first_string, second_string): intento: re.match retorno (first_string, second_string, re.IGNORECASE) no es ninguna excepción (AttributeError, TypeError): retorno first_string == second_string' [Demo Code] (https://repl.it/FWih) – Abhijeet

+0

Introduce la constante correcta, pero no responde la pregunta real. –

61

También puede realizar búsquedas de casos insensibles mediante la búsqueda/partido sin la bandera 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' 
+1

La documentación no menciona la característica que se agrega en una versión en particular (en oposición a, digamos '(? (Condición) sí | no)' que dice que se agregó en 2.4), por lo que espero que siempre haya estado disponible desde la primera versión del módulo 're', que creo que se agregó en 1.5. Básicamente desde el principio de los tiempos para todos los efectos cuando se trata de Python. Está documentado a la mitad de la primera sección de esta página: https://docs.python.org/2/library/re.html#regular-expression-syntax – ArtOfWarfare

+3

Aquí vamos - Revisé la documentación de 1.5 y encontré documentó aproximadamente el 60% del camino hacia abajo en esta página: https://docs.python.org/release/1.5/lib/node65.html#SECTION005210000000000000000 También revisé la documentación de 1.4, que no mencionó esta característica. Así que supongo que se agregó en 1.5, cuando el módulo 'regex' quedó en desuso en favor del módulo' re'. – ArtOfWarfare

+0

¿Funciona esto en python 3? – Private

5

también puede definir entre mayúsculas y minúsculas durante la compilación patrón:

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE) 
+4

En la pregunta OP usa esto y pregunta si hay otra manera de hacerlo. –

+1

Útil para las de desplazamiento rápido. – nottinhill

+1

La pregunta era sobre ignorar el caso del texto que se emparejará, que no se muestra aquí. –

2
#'re.IGNORECASE' for case insensitive results short form re.I 
#'re.match' returns the first match located 
#'re.search' returns location of the where the match is found 
#'re.compile' creates a regex object that can be used for multiple matches 

s = 'TeSt' 
print (re.match(s, re.I)) 
# OR 
pattern = re.compile(r'TeSt', re.I) 
result = pattern.match(s) 
15

El marcador de mayúsculas y minúsculas, (?i) se pueden incorporar directamente en el patrón de expresión:

>>> import re 
>>> s = 'This is one Test, another TEST, and another test.' 
>>> re.findall('(?i)test', s) 
['Test', 'TEST', 'test'] 
+1

Mejor opción, hace que la expresión regular sea portátil en todas las plataformas y la intención es clara en la declaración –

1

En importaciones

import re 

en APP inicialización:

self.re_test = re.compile('test', re.IGNORECASE) 

En el procesamiento en tiempo de ejecución:

if self.re_test.match('TeSt'): 
Cuestiones relacionadas