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 como el i
sufijo de Perl (por ejemplo m/test/i
) en la documentación.
Respuestas:
Pase
re.IGNORECASE
alflags
parámetro desearch
,match
osub
:fuente
re.match('test', 'TeSt', re.IGNORECASE)
podría conducir aTypeError
cuando cualquiera de los atributos esNone
. Utilizandotry & except
para atraparTypeError
coincidencias por first_string == second_string. Código de muestra Código dedef equal_ignore_case(first_string, second_string): try: return re.match(first_string, second_string, re.IGNORECASE) is not None except (AttributeError, TypeError): return first_string == second_string
demostraciónNone
primera.flags
porque de lore.sub
contrario pasare.IGNORECASE
alcount
argumento (también. Stackoverflow.com/questions/42581/… )También puede realizar búsquedas que no distinguen entre mayúsculas y minúsculas mediante la búsqueda / coincidencia sin el indicador IGNORECASE (probado en Python 2.7.3):
fuente
(?(condition)yes|no)
que dice que se agregó en 2.4), por lo que espero que siempre haya estado disponible desde la primera versión delre
módulo, 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: docs.python.org/2/library/re.html#regular-expression-syntaxregex
módulo quedó en desuso a favor delre
módulo.re.match(r'''A ((?i)B) C''', "a b c").group(0)
hace que las mayúsculas y minúsculas no coincidan en todo (A y C), ¡no solo en B! Si solo desea que las mayúsculas y minúsculas coincidan en un grupo de captura específico, este no es el droide que está buscando.El marcador que no distingue entre mayúsculas y minúsculas
(?i)
puede incorporarse directamente en el patrón de expresiones regulares:fuente
'(?i)'
enfoque también tiene la ventaja de que puede crear una lista de expresiones regulares, algunas de las cuales no distinguen entre mayúsculas y minúsculas y otras no. (Y, por supuesto, puede mapearre.compile
esa lista si lo desea.)flags=re.IGNORECASE
?También puede definir mayúsculas y minúsculas durante la compilación del patrón:
fuente
En importaciones
En tiempo de ejecución de procesamiento:
Cabe mencionar que no usar
re.compile
es un desperdicio. Cada vez que se llama al método de coincidencia anterior, se compilará la expresión regular. Esto también es una práctica defectuosa en otros lenguajes de programación. La siguiente es la mejor práctica.En la inicialización de la aplicación:
En tiempo de ejecución de procesamiento:
fuente
re.compile()
...fuente
Para realizar operaciones que no distinguen entre mayúsculas y minúsculas, suministre re.IGNORECASE
y si queremos reemplazar el texto que coincida con el caso ...
fuente
Si desea reemplazar pero sigue manteniendo el estilo de str anterior. Es posible.
Por ejemplo: resalte la cadena "prueba asdasd TEST asd tEst asdasd".
prueba asdasd TEST asd tEst asdasd
fuente
Para la expresión regular que no distingue entre mayúsculas y minúsculas (Regex): hay dos formas de agregar su código:
flags=re.IGNORECASE
El marcador de mayúsculas y minúsculas
(?i)
fuente