如何删除括号及其内的所有内容

问题描述 投票:0回答:1

我有一个Word文档,我想从段落的开头和/或结尾删除括号及其各自的内容。问题是:

  1. 我想避免使用正则表达式模式,因为我注意到它最终排除了文档中的其他元素
  2. 我要查找的段落、括号及其内容必须具有特定的风格。或者在 Word 文档的标准样式中,或者以数字后跟 ) 或字母后跟 ) 开头的样式
  3. 我所说的文字样式是:['List', 'List Paragraph', 'paragraph', 'Normal']

我有一个函数可以检查文档段落是否以数字开头,后跟 ) 或字母开头,后跟 ) 我还尝试编写一个排除括号的代码,但没有成功。 这是我的代码:

textos_encontrados = []
paragrafos_originais = []
paragrafos_com_padrao = []
paragrafos_sem_padrao = []
estilos_de_paragrafo = ['List', 'List Paragraph', 'paragraph', 'Normal']

lista_range_numeros_letras = [str(c) for c in range(2000)] + [chr(ord('a') + i) for i in range(26)]
lista_de_simbolos = [')', '.',  'º',  '-',  'ª']
lista_range_de_simbolos = [str(simbolo) for simbolo in lista_de_simbolos]
indice_numeros = 0
primeiro_numero = lista_range_numeros_letras[0]

def verifica_sequencia(paragrafo):
            texto = paragrafo.text
            indice = 0
            sequencia = []

            while indice < len(texto):
                if texto[indice] in lista_range_numeros_letras:
                    sequencia.append(texto[indice])
                    indice += 1
                else:
                    break

            if sequencia:
                for simbolo in lista_de_simbolos:
                    if indice < len(texto) and texto[indice] == simbolo:
                        print("Sequência:", "".join(sequencia))
                        print(f"Próximo elemento é um símbolo: {simbolo}")
                        texto_encontrado = texto.strip()
                        textos_encontrados.append(texto_encontrado)
                        paragrafos_sem_padrao.append(paragrafo.text)
                        print("PARAGRAFOS SEM PADRAO", paragrafos_com_padrao)
                        break

for paragrafo in document.paragraphs:
            verifica_sequencia(paragrafo)
            texto = paragrafo.text
            if paragrafo.style.name in estilos_de_paragrafo:
                texto_encontrado = texto.strip()
                textos_encontrados.append(texto_encontrado)
                paragrafos_com_padrao.append(paragrafo.text)
                print("PARAGRAFOS COM ESTILO:", paragrafos_com_padrao)
        print("TEXTOS ENCONTRADOS", textos_encontrados)

def remove_text_inside_brackets(text, brackets="()[]"):
            count = [0] * (len(brackets) // 2)  # count open/close brackets
            saved_chars = []
            for character in paragrafos_com_padrao:
                for i, b in enumerate(brackets):
                    if character == b:  # found bracket
                        kind, is_close = divmod(i, 2)
                        count[kind] += (-1) ** is_close  # `+1`: open, `-1`: close
                        if count[kind] < 0:  # unbalanced bracket
                            count[kind] = 0  # keep it
                        else:  # found bracket to remove
                            break
                else:  # character is not a [balanced] bracket
                    if not any(count):  # outside brackets
                        saved_chars.append(character)
            return ''.join(saved_chars)

python python-docx
1个回答
0
投票

您似乎正在尝试从 Word 文档的段落开头和结尾删除括号中的文本或其他指定字符,同时保留特定样式。您现有的代码有一些问题,我将提供修订版本和解释。

首先,让我们创建一个函数来删除括号内的文本(包括圆括号):

def remove_text_inside_brackets(text, brackets="()"):
    count = 0
    saved_chars = []
    for char in text:
        if char == brackets[0]:
            count += 1
        elif char == brackets[1]:
            count -= 1
        elif count == 0:
            saved_chars.append(char)
    return ''.join(saved_chars)

现在,您可以在主代码中使用此函数:

from docx import Document

# Load your Word document
document = Document("your_document.docx")

textos_encontrados = []
paragrafos_com_padrao = []

estilos_de_paragrafo = ['List', 'List Paragraph', 'paragraph', 'Normal']

for paragrafo in document.paragraphs:
    texto = paragrafo.text
    if paragrafo.style.name in estilos_de_paragrafo:
        # Remove text inside parentheses at the beginning and end
        texto_sem_parenteses = remove_text_inside_brackets(texto)
        textos_encontrados.append(texto_sem_parenteses)
        paragrafos_com_padrao.append(paragrafo.text)

# Now, `textos_encontrados` contains the modified paragraphs with parentheses removed.
# You can save them to a new Word document if needed.

此代码将迭代 Word 文档中的段落,对于样式与

estilos_de_paragrafo
中的样式匹配的段落,它将删除括号内的文本并将修改的段落存储在
textos_encontrados
列表中。然后您可以根据需要保存这些修改过的段落。

© www.soinside.com 2019 - 2024. All rights reserved.