Reemplazar las apariciones de una subcadena en una cadena con Python

    Introducci贸n

    Reemplazar todas o n ocurrencias de una subcadena en una cadena dada es un problema bastante com煤n de manipulaci贸n de cadenas y procesamiento de texto en general. Afortunadamente, la mayor铆a de estas tareas se facilitan en Python gracias a su amplia gama de funciones integradas, incluida esta.

    Digamos que tenemos una cadena que contiene la siguiente oraci贸n:

    The brown-eyed man drives a brown car.
    

    Nuestro objetivo es reemplazar la palabra "brown" con la palabra "blue":

    The blue-eyed man drives a blue car.
    

    En este art铆culo, usaremos el replace() funci贸n as铆 como el sub() y subn() funciones con patrones para reemplazar todas las apariciones de una subcadena de una cadena.

    reemplazar()

    La forma m谩s sencilla de hacer esto es usando la funci贸n incorporada – replace() :

    string.replace(oldStr, newStr, count)
    

    Los dos primeros par谩metros son obligatorios, mientras que el tercero es opcional. oldStr es la subcadena que queremos reemplazar con la newStr. Lo que vale la pena se帽alar es que la funci贸n devuelve una nueva cadena, con la transformaci贸n realizada, sin afectar a la original.

    Hagamos un intento:

    string_a = "The brown-eyed man drives a brown car."
    string_b = string_a.replace("brown", "blue")
    print(string_a)
    print(string_b)
    

    Hemos realizado la operaci贸n en string_a, empaquetado el resultado en string_b e imprim铆 ambos.

    Este c贸digo da como resultado:

    The brown-eyed man drives a brown car.
    The blue-eyed man drives a blue car.
    

    De nuevo, la cadena en la memoria que string_a apunta a que permanece sin cambios. Las cadenas en Python son inmutables, lo que simplemente significa que no puede cambiar una cadena. Sin embargo, puede reasignar la variable de referencia a un nuevo valor.

    Para realizar aparentemente esta operaci贸n en el lugar, simplemente podemos reasignar string_a a s铆 mismo despu茅s de la operaci贸n:

    string_a = string_a.replace("brown", "blue")
    print(string_a)
    

    Aqu铆, la nueva cadena generada por el replace() El m茅todo se asigna al string_a variable.

    Reemplazar n apariciones de una subcadena

    Ahora, 驴qu茅 pasa si no deseamos cambiar todas las apariciones de una subcadena? 驴Qu茅 pasa si queremos reemplazar la primera n?

    Ah铆 es donde el tercer par谩metro de la replace() entra la funci贸n. Representa el n煤mero de subcadenas que se van a reemplazar. El siguiente c贸digo solo reemplaza la primera aparici贸n de la palabra "brown" con la palabra "blue":

    string_a = "The brown-eyed man drives a brown car."
    string_a = string_a.replace("brown", "blue", 1)
    print(string_a)
    

    Y esto imprime:

    The blue-eyed man drives a brown car.
    

    De forma predeterminada, el tercer par谩metro est谩 configurado para cambiar todas las ocurrencias.

    Ocurrencias de subcadenas con expresiones regulares

    Para escalar el problema a煤n m谩s, digamos que queremos no solo reemplazar todas las ocurrencias de una determinada subcadena, sino tambi茅n reemplazar todas las subcadenas que se ajustan a un determinado patr贸n. Incluso esto se puede hacer con una sola l铆nea, usando expresiones regulares y la biblioteca est谩ndar re m贸dulo.

    Las expresiones regulares son un tema complejo con una amplia gama de usos en inform谩tica, por lo que no profundizaremos demasiado en este art铆culo, pero si necesita un comienzo r谩pido, puede consultar nuestra gu铆a sobre Expresiones regulares en Python.

    En esencia, una expresi贸n regular define un patr贸n. Por ejemplo, digamos que tenemos un texto sobre personas que tienen perros y gatos, y queremos cambiar ambos t茅rminos con la palabra "pet". Primero, necesitamos definir un patr贸n que coincida con ambos t茅rminos como – (cat|dog).

    Uso de la funci贸n sub ()

    Con el patr贸n resuelto, usaremos el re.sub() funci贸n que tiene la siguiente sintaxis:

    re.sub(pattern, repl, string, count, flags)
    

    El primer argumento es el patr贸n que estamos buscando (una cadena o un Pattern objeto), repl es lo que vamos a insertar (puede ser una cadena o una funci贸n; si es una cadena, cualquier escape de barra invertida se procesa) y string es la cadena en la que estamos buscando.

    Los argumentos opcionales son count y flags que indican cu谩ntas ocurrencias deben reemplazarse y los indicadores utilizados para procesar la expresi贸n regular, respectivamente.

    Si el patr贸n no coincide con ninguna subcadena, la cadena original se devolver谩 sin cambios:

    import re
    string_a = re.sub(r'(cat|dog)', 'pet', "Mark owns a dog and Mary owns a cat.")
    print(string_a)
    

    Este c贸digo imprime:

    Mark owns a pet and Mary owns a pet.
    

    Coincidencia de patrones que no distingue entre may煤sculas y min煤sculas

    Para realizar una coincidencia de patrones que no distingue entre may煤sculas y min煤sculas, por ejemplo, estableceremos el par谩metro de marca en re.IGNORECASE:

    import re
    string_a = re.sub(r'(cats|dogs)', "Pets", "DoGs are a man's best friend", flags=re.IGNORECASE)
    print(string_a)
    

    Ahora cualquier combinaci贸n de caso de "dogs" tambi茅n se incluir谩. Al hacer coincidir el patr贸n con varias cadenas, para evitar copiarlo en varios lugares, podemos definir un Pattern objeto. Tambi茅n tienen un sub() funci贸n con la sintaxis:

    Pattern.sub(repl, string, count)
    

    Usar objetos de patr贸n

    Definamos un Pattern para gatos y perros y compruebe un par de frases:

    import re
    pattern = re.compile(r'(Cats|Dogs)')
    string_a = pattern.sub("Pets", "Dogs are a man's best friend.")
    string_b = pattern.sub("Animals", "Cats enjoy sleeping.")
    print(string_a)
    print(string_b)
    

    Lo que nos da la salida:

    Pets are a man's best friend.
    Animals enjoy sleeping.
    

    La funci贸n subn ()

    Tambi茅n hay un subn() m茅todo con la sintaxis:

    re.subn(pattern, repl, string, count, flags)
    

    los subn() La funci贸n devuelve una tupla con la cadena y el n煤mero de coincidencias en la Cadena que hemos buscado:

    import re
    string_a = re.subn(r'(cats|dogs)', 'Pets', "DoGs are a mans best friend", flags=re.IGNORECASE)
    print(string_a)
    

    La tupla se ve as铆:

    ('Pets are a mans best friend', 1)
    

    UN Pattern el objeto contiene un similar subn() funci贸n:

    Pattern.subn(repl, string, count)
    

    Y se usa de una manera muy similar:

    import re
    pattern = re.compile(r'(Cats|Dogs)')
    string_a = pattern.subn("Pets", "Dogs are a man's best friend.")
    string_b = pattern.subn("Animals", "Cats enjoy sleeping.")
    print(string_a)
    print(string_b)
    

    Esto resulta en:

    ("Pets are a man's best friend.", 1)
    ('Animals enjoy sleeping.', 1)
    

    Conclusi贸n

    Python ofrece funciones f谩ciles y sencillas para el manejo de cadenas. La forma m谩s sencilla de reemplazar todas las apariciones de una subcadena dada en una cadena es usar el replace() funci贸n.

    Si es necesario, la biblioteca est谩ndar re El m贸dulo proporciona un conjunto de herramientas m谩s diverso que se puede utilizar para problemas m谩s espec铆ficos como encontrar patrones y b煤squedas que no distinguen entre may煤sculas y min煤sculas.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *