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. Недостаток внимания.