Reemplazar múltiples carácters en una cadena en Python

Rayven Esplanada 10 octubre 2023
  1. Use str.replace() para reemplazar múltiples caracteres en Python
  2. Use re.sub() o re.subn() para reemplazar múltiples caracteres en Python
  3. translate() y maketrans() para reemplazar múltiples caracteres en Python
Reemplazar múltiples carácters en una cadena en Python

Este tutorial muestra cómo reemplazar varios caracteres en una cadena en Python.

Digamos que queremos eliminar los caracteres especiales de una cadena y reemplazarlos por espacios en blanco.

  • La lista de caracteres especiales a eliminar sería !#$%^&*().
  • Además, queremos reemplazar las comas , con espacios en blanco.
  • El texto de muestra que vamos a manipular:
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$

Use str.replace() para reemplazar múltiples caracteres en Python

Podemos usar el método replace() del tipo de datos str para reemplazar las subcadenas en una salida diferente.

replace() acepta dos parámetros, el primer parámetro es el patrón regex con el que quiere hacer coincidir las cadenas, y el segundo parámetro es la cadena de reemplazo para las cadenas coincidentes.

También es un tercer parámetro opcional en replace() que acepta un entero para establecer el máximo count de reemplazos a ejecutar. Si pones 2 como parámetro de count, la función replace() sólo coincidirá y reemplazará 2 instancias dentro de la cadena.

str.replace('Hello', 'Hi') reemplazará todas las instancias de Hello en una cadena con Hi. Si tienes una cadena Hello World y ejecutas la función de reemplazo en ella, se convertirá en Hi World después de la ejecución.

Usemos replace en el texto de muestra que declaramos arriba. Primero eliminando los caracteres especiales mediante un bucle en cada carácter y reemplazándolos con una cadena vacía, luego convirtiendo las comas en espacios en blanco.

txt = "A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$"


def processString(txt):
    specialChars = "!#$%^&*()"
    for specialChar in specialChars:
        txt = txt.replace(specialChar, "")
    print(txt)  # A,Quick,brown,fox,jumped,over,the,lazy,dog
    txt = txt.replace(",", " ")
    print(txt)  # A Quick brown fox jumped over the lazy dog

Esto significa que cualquier cosa dentro del corchete de spChars será reemplazado por una cadena vacía usando txt.replace(spChars, '').

El resultado de la cadena de la primera función replace() sería entonces:

A, Quick, brown, fox, jumped, over, the, lazy, dog

La siguiente llamada replace() reemplazará todas las instancias de coma , en un solo espacio en blanco:

A Quick brown fox jumped over the lazy dog

Use re.sub() o re.subn() para reemplazar múltiples caracteres en Python

En Python, puedes importar el módulo re module, que tiene una cantidad de operaciones de coincidencia de expresiones para regex para que las utilices.

Dos de esas funciones dentro de re son sub() y subn().

Declaremos otro ejemplo de cadena para estos métodos. Digamos que queremos reemplazar todos los números dentro de una cadena en X:

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."

re.sub() para reemplazar múltiples caracteres en Python

La función tiene 3 argumentos principales. El primer argumento acepta un patrón regex, el segundo argumento es una cadena para reemplazar los patrones emparejados, y el tercero es la cadena con la que operar.

Crear una función convierte todos los números dentro de una cadena en X.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString3(txt):
    txt = re.sub("[0-9]", "X", txt)
    print(txt)


processString3(txt)

Resultado:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.

re.subn() para reemplazar múltiples caracteres en Python

Esta función es esencialmente la misma que re.sub() pero en cambio devuelve una tupla de la cadena convertida y el número de reemplazos realizados.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString4(txt):
    txt, n = re.subn("[0-9]", "X", txt)
    print(txt)


processString4(txt)

Resultado:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.'
txt, n = re.subn("[0-9]", "X", txt)

En el fragmento de código anterior, la cadena procesada se asigna a txt y el contador de reemplazos se asigna a n.

re.subn() es útil si quiere anotar cuántos grupos de patrones ha manipulado como métrica o para su posterior procesamiento.

translate() y maketrans() para reemplazar múltiples caracteres en Python

translate() y maketrans() utilizan un enfoque diferente al de regex, utiliza diccionarios para mapear los valores antiguos a los nuevos.

maketrans() acepta 3 parámetros o un solo diccionario de mapeo:

  • str1 - Cadena de caracteres a ser reemplazados.
  • str2 - Cadena de reemplazos para los carácters de arriba
  • str3 - Cadena de caracteres a borrar

maketrans() una tabla de mapeo entre la cadena original y su reemplazo.

translate() acepta lo que maketrans() devuelve y luego genera la cadena traducida.

Digamos que queremos convertir todas las vocales en minúsculas dentro de una cadena en mayúsculas y borrar cada x, y, y z encontradas en la cadena.

txt = "Hi, my name is Mary. I like zebras and xylophones."


def processString5(txt):
    transTable = txt.maketrans("aeiou", "AEIOU", "xyz")
    txt = txt.translate(transTable)
    print(txt)


processString5(txt)

Resultado:

HI, m nAmE Is MAr. I lIkE EbrAs And lOphOnEs.

translate() convirtió todas las vocales en minúsculas a mayúsculas y eliminó todas las instancias de x, y, y z.

Otro enfoque para usar estos métodos es usar un solo diccionario de mapeos en lugar de 3 argumentos.

def processString6(txt):
    dictionary = {
        "a": "A",
        "e": "E",
        "i": "I",
        "o": "O",
        "u": "U",
        "x": None,
        "y": None,
        "z": None,
    }
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    print(txt)

Esto seguirá produciendo la misma salida que processString5 pero se implementa con los diccionarios. Puedes usar el que te resulte más conveniente.

En resumen, hay múltiples maneras de reemplazar múltiples caracteres en una cadena usando funciones incorporadas o funciones de librerías importadas en Python.

El método más común es usar replace(). re.sub() y subn() también son bastante fáciles de usar y aprender. translate() utiliza un enfoque diferente ya que no se basa en expresiones regulares para realizar la manipulación de cadenas, sino que se basa en diccionarios y mapas.

Si quieres, puedes incluso hacer un bucle manual sobre la cadena usando para los bucles y añadir tus propias condiciones para reemplazar y sólo usar substring() o split(), pero sería muy ineficiente y redundante. Python ofrece funciones existentes para hacer el trabajo por ti, lo cual es mucho más fácil que hacer el trabajo sucio tú mismo.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artículo relacionado - Python String