¿Cuál es la forma más fácil de hacer un reemplazo de cadena sin distinción entre mayúsculas y minúsculas en Python?
python
string
case-insensitive
Adam Ernst
fuente
fuente
'hippo'
, pero sería útil si el valor de reemplazo se pasara a una función, por lo que es más un buen ejemplo que cualquier otra cosa.re.escape
usar su aguja, aquí hay otra trampa que esta respuesta no puede evitar, anotada en stackoverflow.com/a/15831118/1709587 : dado quere.sub
procesa secuencias de escape, como se indica en docs.python.org/library/re.html#re .sub , necesita escapar de todas las barras invertidas en su cadena de reemplazo o usar una lambda.fuente
re.sub('hello', 'bye', 'hello HeLLo HELLO', flags=re.IGNORECASE)
re.sub
solo admite esta bandera desde Python 2.7.En una sola línea:
O use el argumento opcional "flags":
fuente
Continuando con la respuesta de bFloch, esta función cambiará no una, sino todas las ocurrencias de lo antiguo con lo nuevo, en un caso insensible.
fuente
Como Blair Conrad dice que string.replace no es compatible con esto.
Use la expresión regular
re.sub
, pero recuerde escapar primero de la cadena de reemplazo. Tenga en cuenta que no hay opción de banderas en 2.6 parare.sub
, por lo que tendrá que usar el modificador incorporado'(?i)'
(o un objeto RE, consulte la respuesta de Blair Conrad). Además, otro escollo es que sub procesará los escapes de barra invertida en el texto de reemplazo, si se proporciona una cadena. Para evitar esto, uno puede pasar una lambda.Aquí hay una función:
fuente
Esta función usa las funciones
str.replace()
yre.findall()
. Se reemplazará todas las apariciones depattern
enstring
larepl
forma de mayúsculas y minúsculas.fuente
Esto no requiere RegularExp
fuente
Una observación interesante sobre los detalles y opciones de sintaxis:
Python 3.7.2 (etiquetas / v3.7.2: 9a3ffc0492, 23 de diciembre de 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] en win32
'la base la base la base'
'TREEROOT TREerOot de base'
'la base la base la base'
'TREEROOT TREerOot de base'
Entonces, el prefijo (? I) en la expresión de coincidencia o agregar "flags = re.I" como cuarto argumento dará como resultado una coincidencia que no distingue entre mayúsculas y minúsculas. PERO, usar solo "re.I" como el cuarto argumento no da como resultado una coincidencia entre mayúsculas y minúsculas.
Para comparacion,
['TREEROOT', 'treeroot', 'TREerOot']
['raíz del arbol']
fuente
Estaba teniendo \ t siendo convertido a las secuencias de escape (desplazarse un poco hacia abajo), así que noté que re.sub convierte los caracteres escapados con barra invertida en secuencias de escape.
Para evitar eso escribí lo siguiente:
Reemplazar mayúsculas y minúsculas.
Además, si desea reemplazarlo con los caracteres de escape, como las otras respuestas aquí que obtienen los caracteres de bashslash de significado especial convertidos en secuencias de escape, simplemente decodifique su búsqueda y / o reemplace la cadena. En Python 3, podría tener que hacer algo como .decode ("unicode_escape") # python3
Probado en Python 2.7.8
Espero que ayude.
fuente
nunca publiqué una respuesta antes y este hilo es muy antiguo, pero se me ocurrió otra solución y pensé que podría obtener su respuesta, no estoy experimentado en la programación de Python, así que si hay inconvenientes aparentes, indíquelos ya que es un buen aprendizaje: )
fuente