Buscar y reemplazar texto en presentaciones PowerPoint en Python

Descripción general

Aspose.Slides para Python a través de .NET puede buscar, resaltar y reemplazar texto en un cuadro de texto individual o en toda una presentación. Estas capacidades son útiles para la revisión, la redacción, la verificación de terminología, la limpieza de plantillas y otros flujos de trabajo automatizados de procesamiento de documentos.

En los primeros ejemplos a continuación, utilizamos un archivo llamado “sample.pptx”, que contiene un único cuadro de texto en la primera diapositiva con el siguiente texto:

Texto de ejemplo

Elegir el ámbito de búsqueda

Utilice los métodos de TextFrame para limitar una operación a un cuadro de texto. Utilice los métodos de Presentation para procesar todo el texto aplicable en la presentación.

Operación Un cuadro de texto Presentación completa
Resaltar texto literal TextFrame.highlight_text Presentation.highlight_text
Resaltar coincidencias de expresiones regulares TextFrame.highlight_regex Presentation.highlight_regex
Reemplazar texto literal TextFrame.replace_text Presentation.replace_text
Reemplazar coincidencias de expresiones regulares TextFrame.replace_regex Presentation.replace_regex

Configurar la coincidencia de texto

Para operaciones de texto literal, utilice TextSearchOptions para controlar la coincidencia:

Las operaciones con expresiones regulares utilizan una cadena de patrón, por lo que las reglas de coincidencia, como la sensibilidad a mayúsculas y los límites de palabra, se definen mediante la expresión.

Resaltar texto

Utilice el método TextFrame.highlight_text para resaltar coincidencias de texto literal en un cuadro de texto. Pase TextSearchOptions para controlar la búsqueda.

El ejemplo de código a continuación resalta todas las apariciones de los caracteres “try” y luego resalta solo la palabra completa “to”.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    substring_search_options = slides.TextSearchOptions()
    substring_search_options.case_sensitive = False

    # Resaltar cada aparición de "try" en el cuadro de texto.
    shape.text_frame.highlight_text(
        "try", draw.Color.light_blue, substring_search_options, None
    )

    whole_word_search_options = slides.TextSearchOptions()
    whole_word_search_options.whole_words_only = True
    whole_word_search_options.case_sensitive = False

    # Resaltar solo la palabra completa "to".
    shape.text_frame.highlight_text(
        "to", draw.Color.violet, whole_word_search_options, None
    )

    presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)

El resultado:

El texto resaltado

Resaltar texto usando expresiones regulares

El método TextFrame.highlight_regex resalta las coincidencias de texto encontradas mediante una expresión regular en un cuadro de texto.

El siguiente código resalta todas las palabras que contienen siete o más caracteres:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]
    word_pattern = r"\b[^\s]{7,}\b"

    shape.text_frame.highlight_regex(word_pattern, draw.Color.yellow, None)

    presentation.save(
        "highlighted_text_using_regex.pptx", slides.export.SaveFormat.PPTX
    )

El resultado:

El texto resaltado usando la expresión regular

Resaltar texto en toda la presentación

Utilice Presentation.highlight_text y Presentation.highlight_regex para buscar en todos los cuadros de texto aplicables de una presentación. El siguiente ejemplo resalta un término literal y todas las direcciones de correo electrónico:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    presentation.highlight_text(
        "confidential", draw.Color.orange, search_options, None
    )

    email_pattern = r"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b"
    presentation.highlight_regex(email_pattern, draw.Color.yellow)

    presentation.save(
        "highlighted_presentation.pptx", slides.export.SaveFormat.PPTX
    )

Reemplazar texto en un cuadro de texto

Utilice TextFrame.replace_text para texto literal y TextFrame.replace_regex para reemplazo basado en patrones. Estos métodos actualizan el texto coincidente dentro del cuadro de texto existente, manteniendo el formato de la porción circundante en lugar de reconstruir el cuadro de texto a partir de una cadena simple.

El siguiente ejemplo normaliza una variante ortográfica y luego reemplaza las etiquetas de versión:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    shape.text_frame.replace_text(
        "colour", "color", search_options, None
    )

    version_pattern = r"(?i)\bv\d+(?:\.\d+)*\b"
    shape.text_frame.replace_regex(version_pattern, "current version")

    presentation.save(
        "updated_text_frame.pptx", slides.export.SaveFormat.PPTX
    )

Si una coincidencia abarca porciones con formatos diferentes, revise la salida para confirmar qué formato debe aplicarse al texto de reemplazo.

Reemplazar texto en toda la presentación

Utilice Presentation.replace_text y Presentation.replace_regex para aplicar las mismas operaciones en toda la presentación. Esto es útil para la limpieza de plantillas, actualizaciones de terminología y la redacción.

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = True

    presentation.replace_text(
        "Contoso", "Example Corp", search_options, None
    )

    account_number_pattern = r"\bACCT-\d{6}\b"
    presentation.replace_regex(account_number_pattern, "ACCT-REDACTED")

    presentation.save(
        "updated_presentation.pptx", slides.export.SaveFormat.PPTX
    )

Preguntas frecuentes

¿Cómo puedo buscar solo en un cuadro de texto en lugar de en toda la presentación?

Obtenga el marco de texto de la forma y llame a TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text o TextFrame.replace_regex en ese marco de texto. Los métodos a nivel de presentación procesan todos los cuadros de texto aplicables en su lugar.

¿Cómo puedo coincidir palabras completas con la capitalización correcta?

Establezca TextSearchOptions.whole_words_only y TextSearchOptions.case_sensitive en True, y pase las opciones a un método de resaltado o reemplazo de texto literal. Para expresiones regulares, defina los límites de palabra y la sensibilidad a mayúsculas en el propio patrón.

¿Puede la búsqueda y el reemplazo incluir texto en las notas de la diapositiva?

Sí. Establezca TextSearchOptions.include_notes en True al usar una operación de texto literal a nivel de presentación.

¿Mantiene el reemplazo de texto su formato?

TextFrame.replace_text y TextFrame.replace_regex modifican el texto coincidente dentro del cuadro de texto existente y conservan el formato de la porción circundante. Si una coincidencia abarca porciones con formatos diferentes, inspeccione el resultado para garantizar que el reemplazo utilice el estilo deseado.