Поиск и замена текста в презентациях PowerPoint на Python
Обзор
Aspose.Slides for Python via .NET может искать, выделять и заменять текст в отдельном текстовом фрейме или в презентации целиком. Эти возможности полезны для проверки, редактирования, проверки терминологии, очистки шаблонов и других автоматизированных процессов обработки документов.
В первых примерах ниже используется файл с именем “sample.pptx”, который содержит один текстовый блок на первом слайде со следующим текстом:

Выберите область поиска
Используйте методы класса TextFrame чтобы ограничить операцию одним текстовым фреймом. Используйте методы класса Presentation чтобы обработать весь применимый текст в презентации.
| Операция | Один текстовый фрейм | Вся презентация |
|---|---|---|
| Выделить буквальный текст | TextFrame.highlight_text | Presentation.highlight_text |
| Выделить совпадения регулярных выражений | TextFrame.highlight_regex | Presentation.highlight_regex |
| Заменить буквальный текст | TextFrame.replace_text | Presentation.replace_text |
| Заменить совпадения регулярных выражений | TextFrame.replace_regex | Presentation.replace_regex |
Настройка сопоставления текста
Для операций с буквальным текстом используйте TextSearchOptions для управления сопоставлением:
- TextSearchOptions.whole_words_only ограничивает совпадения полными словами.
- TextSearchOptions.case_sensitive управляет требованием совпадения регистра символов.
- TextSearchOptions.include_notes включает заметки слайдов в поиск, замену и выделение на уровне презентации.
Операции с регулярными выражениями используют строку шаблона, поэтому такие правила, как чувствительность к регистру и границы слов, задаются самим выражением.
Выделение текста
Используйте метод TextFrame.highlight_text для выделения буквальных совпадений текста в текстовом фрейме. Передайте TextSearchOptions для управления поиском.
Пример кода ниже выделяет все вхождения символов “try” и затем выделяет только полное слово “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
# Выделить каждое вхождение "try" в текстовом фрейме.
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
# Выделить только полное слово "to".
shape.text_frame.highlight_text(
"to", draw.Color.violet, whole_word_search_options, None
)
presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)
Результат:

Выделение текста с использованием регулярных выражений
Метод TextFrame.highlight_regex выделяет совпадения текста, найденные регулярным выражением, в текстовом фрейме.
Следующий код выделяет все слова, содержащие семь и более символов:
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
)
Результат:

Выделение текста во всей презентации
Используйте Presentation.highlight_text и Presentation.highlight_regex для поиска во всех применимых текстовых фреймах презентации. В следующем примере выделяется буквальный термин и все адреса электронной почты:
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
)
Замена текста в текстовом фрейме
Используйте TextFrame.replace_text для буквального текста и TextFrame.replace_regex для замены на основе шаблона. Эти методы обновляют найденный текст внутри существующего текстового фрейма, сохраняя форматирование окружающих частей вместо полного пересоздания фрейма из строки.
Следующий пример стандартизирует вариант написания и затем заменяет метки версий:
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
)
Если одно совпадение охватывает части с разным форматированием, проверьте результат, чтобы убедиться, какое форматирование должно применяться к заменяемому тексту.
Замена текста во всей презентации
Используйте Presentation.replace_text и Presentation.replace_regex для применения тех же операций ко всей презентации. Это полезно для очистки шаблонов, обновления терминологии и редактирования.
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
)
Часто задаваемые вопросы
Как я могу искать только один текстовый блок вместо всей презентации?
Получите текстовый фрейм формы и вызовите TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text или TextFrame.replace_regex для этого фрейма. Методы уровня презентации обрабатывают все применимые текстовые фреймы.
Как я могу сопоставлять полные слова с правильным регистром?
Установите TextSearchOptions.whole_words_only и TextSearchOptions.case_sensitive в True и передайте параметры в метод выделения или замены буквального текста. Для регулярных выражений определите границы слов и чувствительность к регистру непосредственно в шаблоне.
Может ли поиск и замена включать текст в заметках слайдов?
Да. Установите TextSearchOptions.include_notes в True, когда используете операцию буквального текста на уровне презентации.
Сохраняет ли замена текста его форматирование?
TextFrame.replace_text и TextFrame.replace_regex изменяют найденный текст внутри существующего текстового фрейма и сохраняют форматирование окружающих частей. Если совпадение охватывает участки с разным форматированием, проверьте результат, чтобы убедиться, что замена использует желаемый стиль.