Python regEx не определяет пробельные символы

Я пытаюсь заменить некоторые ключевые слова в документе с помощью Django Template, но, к сожалению, я имею дело с обычными пользовательскими данными, поэтому моя функция получает словарь с ключами, которые, я уверен, будут содержать пробел. Чтобы справиться с этим риском, я пытаюсь сделать следующее обходное решение, используя regEx:

from typing import Dict, List
from django.template import Context, Template
import docx
from docxcompose.composer import Composer
import re
import django
from django.conf import settings

settings.configure(TEMPLATES=[
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['.'],
        'APP_DIRS': False
    },
])
django.setup()


def combine_documents(documents: List[dict], template_data: Dict):
    
    document_paths = []
    placeholder = docx.Document()
    composer = Composer(placeholder)
    
    for i in range(len(documents)):
        document_paths.append(docx.Document(documents[i]["path"]))
        composer.append(document_paths[i])
        composer.doc.add_page_break()
    
    context = Context(template_data, autoescape=False)
    document = composer.doc
    
    pattern = re.compile(r"\{{[\s\S]*\}}", re.IGNORECASE)
    
    for paragraph in document.paragraphs:
        for word in paragraph.text.split():
            matches = pattern.finditer(word)
            # print(word)
            for match in matches:
                print(match.group())
                if " " in match.group() and match.group() == word:
                    print(match.group())
                    print("it's here")
                    paragraph.text = paragraph.text.replace(" ", "_")
        template = Template(paragraph.text)
        print(template.render(context))
            
    
    return "Ok!"


combine_documents(documents = [{
  "title": "Titulo",
  "path": "libs/plugins/signature/signature_providers/documents/Contrato de Prestação de Serviço - Exemplo.docx"
},
{
  "title": "Outro título",
  "path": "libs/plugins/signature/signature_providers/documents/Contrato de Prestação de Serviço - Exemplo.docx"
}], template_data={"Empresa": "FakeCompany",
  "Endereço Completo": "Rua 1",
  "Cidade": "São Paulo",
  "Estado": "São Paulo",
  "CEP": "12345678",
  "CNPJ": "317637667-0001",
  "Valor": "R$550"})

Я уже перепробовал все типы regEx, которые только мог придумать, например \{{(.*?)\}}, но он просто не работает на именах ключей с пробелами (в данном примере я пробовал "Endereço Completo"), хотя в отладчиках regEx он работает. Я делаю что-то не так?

К сожалению, я не могу спросить пользователя о подходящем имени ключа и не могу сделать шаблон Django с фильтрами и все такое.

Моя ошибка. Когда я итерировал каждое слово абзаца на for word in paragraph.text.split():, он, очевидно, отделял и Endereço Completo. Недостаток внимания.

Вернуться на верх