Выделите все значения даты в Word DOC, используя Python DOCX - PullRequest
0 голосов
/ 24 апреля 2018

Я ищу код Python для выделения всех значений даты в формате "MM-DD-YYYY" в текстовом документе.Я использую слово docx для этого.ниже мой код, но он выделяет полную строку вместо единственной даты.

for p in doc.paragraphs:  

 date1 = re.findall(r"[0-9]{2}-[0-9]{2}-(?!0000)[0-9]{4}", p.text)
    for run in p.runs:
    if date1:
    run.font.highlight_color = WD_COLOR_INDEX.YELLOW

1 Ответ

0 голосов
/ 24 апреля 2018

Чтобы ваш сценарий только добавил цвет к дате, он должен быть один в цикле.

Рассмотрим этот пример:

from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_COLOR_INDEX

document = Document()

document.add_heading('Document Title', 0)

p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' 05-03-2018 ')
p.add_run('italic.').italic = True

document.save('demo.docx')

А затем:

doc = Document('demo.docx')

for p in doc.paragraphs:
    for run in p.runs:
        date1 = re.findall(r"[0-9]{2}-[0-9]{2}-(?!0000)[0-9]{4}", run.text)
        if date1:
            run.font.highlight_color = WD_COLOR_INDEX.YELLOW

doc.save('demo.docx')

Обновление: Может быть, это может вам помочь.Будет выполнен поиск строки в тексте абзаца.Если он найден, он сохранит прогоны в списке, удалит текст абзаца, а затем перестроит прогоны.Прогон с совпадением внутри перестраивается со специальным синтаксисом для раскраски даты.

from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_COLOR_INDEX

document = Document()

document.add_heading('Document Title', 0)

p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold text. ').bold = True
p.add_run('Current date: 05-03-2018 ')
p.add_run('italic.').italic = True

document.save('demo.docx')

doc = Document('demo.docx')

pattern = r"[0-9]{2}-[0-9]{2}-(?!0000)[0-9]{4}"

for p in doc.paragraphs:

    if re.findall(pattern, p.text):
        runs = list(p.runs)
        p.text = ''

        for run in runs:
            match = re.search(pattern, run.text)

            if not match:
                newrun = p.add_run(run.text)
                if run.bold:
                    newrun.bold = True
                if run.italic:
                    newrun.italic = True
            else:
                start, end = match.span()
                p.add_run(run.text[0:start])
                colored = p.add_run(run.text[start:end])
                colored.font.highlight_color = WD_COLOR_INDEX.YELLOW
                p.add_run(run.text[end:len(run.text)+1])

doc.save('demo.docx')
...