Nano Hash - криптовалюты, майнинг, программирование

Python docx заменяет строку в абзаце, сохраняя стиль с точкой

У меня возникли проблемы с использованием Python Docx для замены строки при сохранении стиля (даже с этим суперполезным постом). Изюминка, которую я добавляю, заключается в том, что в моем тексте есть точки, которые распознаются как отдельные прогоны.

Я только начал с python-docx, и после прочтения документации понял, что он работает с целыми абзацами. Я пытался использовать его на уровне прогонов, но, похоже, он ограничивается точками [.], любым числовым текстом или текстом другого формата. Чего я пытаюсь добиться, так это найти --› заменить {{%cellbg key.value }} (как в примере ниже), сохраняя при этом стиль.

В моем шаблоне Word:

sometext.here{{%cellbg key.value }}some.other.text.i.don't.care.about

Мой код питона:

from docx import Document
doc = Document(filename)
for p in doc.paragraphs:
    if re.search('(.*?){{%cellbg (.*?) }}(.*?)', paragraph.text):
        cellbg_og = re.search(r'\{\{%cellbg (.*?)\}\}(.*?)', paragraph.text).group(0)
        cellbg_tag = re.search(r'\{\{\%(.*?)\s\}\}', cellbg_og).group(1)
        replace_cellbg = '{% ' + cellbg_tag + ' %}'
        paragraph.text = paragraph.text.replace(cellbg_og, replace_cellbg)
# doc.save(filename)
doc.save('test.docx')
return 1

В идеале, когда я реализую это, я хотел бы получить следующий результат:

Исходный шаблон: sometext.here{{%cellbg key.value }}some.other.text.i.don't.care.about

Ожидаемый результат: sometext.here{% cellbg key.value %}some.other.text.i.don't.care.about

Что я сейчас получаю: sometext.here{% cellbg key.value %}some.other.text.i.don't.care .о

Что я делаю не так? Любая помощь будет супер оценена!

23.03.2021

  • Ответ удался? 24.03.2021

Ответы:


1

Вы можете использовать один шаблон с группой захвата.

(Глядя на код, я думаю, что это должно быть for paragraph in doc.paragraphs:)

{{%(cellbg\s+.+?)\s*}}

Шаблон соответствует:

  • {{% Соответствовать буквально
  • ( Capture group 1 (referred to by \1 in the example code)
    • cellbg\s+.+? Match cellbg, 1+ whitspace chars and 1+ times any char as least as possible (non greedy)
  • ) Закрыть группу 1
  • \s* Совпадение с необязательными пробелами
  • }} Совпадение буквально

В замене используйте группу захвата с произвольным интервалом слева и справа между одиночными завитками.

{% \1 %}

демонстрация регулярных выражений

Пример использования строки примера:

import re

regex = r"{{%(cellbg\s+.+?)\s*}}"
s = "sometext.here{{%cellbg key.value }}some.other.text.i.don't.care.about"
result = re.sub(regex, r"{% \1 %}", s)

if result:
    print(result)

Выход

sometext.here{% cellbg key.value %}some.other.text.i.don't.care.about
23.03.2021
  • Большое спасибо за это! Я понял, что у меня есть еще одна проблема, поскольку текст, который я разместил, действительно должен быть в таблице. Я знаю, что должен добавить: для таблицы в tpl.tables: для строки в table.rows: для ячейки в row.cells: Однако теперь это не работает для меня... 26.03.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..