当其中包含字符串时,正则表达式匹配完整的段落块

Regex match full paragraph block when it contains a string inside it

我有一个文本文件,因为如果其中包含一个字符串,我想匹配完整的段落块,但我当前的正则表达式无法匹配包括新行在内的完整段落。

文本示例:

NOMEAR ISABELLE FERREIRA ZARONI, ID FUNCIONAL Nº
5100796-7, para exercer, com validade a contar de 16 de novembro
de 2020, o cargo em comissão de Assessor, símbolo DAS-7, da Sub-
secretaria de Concessões e Parcerias, da Secretaria de Estado de
Planejamento e Gestão, anteriormente ocupado por Vinicius dos San-
tos Silva, ID Funcional n° 5108029-0. Processo nº SEI-
1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .

NOMEAR KARINE MATOS DIAS, ID FUNCIONAL Nº 5092869-4 para
exercer, com validade a contar de 16 de novembro de 2020, o cargo
em comissão de Assessor, símbolo DAS-7, da Secretaria de Estado
de Planejamento e Gestão, anteriormente ocupado por Amauri Ferrei-
ra do Carmo, ID Funcional nº 5099579-0. Processo nº SEI-
1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .

NOMEAR ROSIONE FERNANDES DE SÁ, ID FUNCIONAL Nº
4413710-9, para exercer, com validade a contar de 16 de novembro
de 2020, o cargo em comissão de Assistente II, símbolo DAI-6, da
Secretaria de Estado de Planejamento e Gestão, anteriormente ocu-
pado por Luis Henrique Ferreira de Aquino, ID Funcional nº 1914315-
0. Processo nº SEI-120001/014825/2020.

EXONERAR, com validade a contar de 16 de novembro de 2020,
LUIS HENRIQUE FERREIRA DE AQUINO, ID FUNCIONAL Nº
1914315-0, do cargo em comissão de Assistente II, símbolo DAI-6, da
Secretaria de Estado de Planejamento e Gestão. Processo nº SEI-
120001/014825/2020.

如果上面的文本块包含 来自规划和管理国务卿的,我想匹配完整的段落所以预期的输出 是获取所有段落,因为所有段落都在单行或多行中包含该句子

姓名 ISABELLE FERREIRA ZARONI,身份证号码。 5100796-7,行权,11月16日起生效 2020 年,顾问的佣金位置,代号 DAS-7,Sub- 特许经营和伙伴关系秘书处, 国务秘书处 规划和管理,以前由 Vinicius dos San- tos Silva,功能 ID #5108029-0。工艺编号 SEI- 1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .

姓名 KARINE MATOS DIAS,职能 ID 号 5092869-4 行使,自 2020 年 11 月 16 日起生效,该职位 在顾问委员会中,符号 DAS-7, 国务卿 规划和管理,以前由 Amauri Ferrei 占据- ra do Carmo,功能 ID 号 5099579-0。工艺编号 SEI- 1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .

姓名 ROSIONE FERNANDES DE SÁ,职能 ID 号。 4413710-9,行使,11月16日起生效 2020年,小助手II委托位置,代号DAI-6,da 规划与管理大臣,此前担任 作者:Luis Henrique Ferreira de Aquino,功能 ID 号 1914315- 0.进程号SEI-120001/014825/2020.

EXONERATE,自 2020 年 11 月 16 日起生效, 路易斯·恩里克·费雷拉·德·阿基诺,功能性 ID 号 1914315-0,来自助手II委托中的位置,符号DAI-6,da 规划与管理国务秘书。工艺编号 SEI- 120001/014825/2020.

我试过的

import re
pattern = re.compile(r'.*Secretaria de Estado de Planejamento e Gestão.*', re.MULTILINE)

with open('pdf_text.txt', 'r') as file:
    data = file.read()
matched = pattern.findall(data)
print (matched)

我的当前输出:

['Secretaria de Estado de Planejamento e Gestão, anteriormente ocu-', 'Secretaria de Estado de Planejamento e Gestão. Processo nº SEI-']

此输出有两个问题,首先它不匹配此处的完整段落块,然后不采用单行或多行中存在句子的所有块。

不使用 re 的一种方法:

[i for i in text.split("\n\n") 
 if "da Secretaria de Estado de Planejamento e Gestão" in i.replace("\n", " ")]

输出:

['NOMEAR ISABELLE FERREIRA ZARONI, ID FUNCIONAL Nº\n5100796-7, para exercer, com validade a contar de 16 de novembro\nde 2020, o cargo em comissão de Assessor, símbolo DAS-7, da Sub-\nsecretaria de Concessões e Parcerias, da Secretaria de Estado de\nPlanejamento e Gestão, anteriormente ocupado por Vinicius dos San-\ntos Silva, ID Funcional n° 5108029-0. Processo nº SEI-\n1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .',
 'NOMEAR KARINE MATOS DIAS, ID FUNCIONAL Nº 5092869-4 para\nexercer, com validade a contar de 16 de novembro de 2020, o cargo\nem comissão de Assessor, símbolo DAS-7, da Secretaria de Estado\nde Planejamento e Gestão, anteriormente ocupado por Amauri Ferrei-\nra do Carmo, ID Funcional nº 5099579-0. Processo nº SEI-\n1 2 0 0 0 1 / 0 1 4 6 11 / 2 0 2 0 .',
 'NOMEAR ROSIONE FERNANDES DE SÁ, ID FUNCIONAL Nº\n4413710-9, para exercer, com validade a contar de 16 de novembro\nde 2020, o cargo em comissão de Assistente II, símbolo DAI-6, da\nSecretaria de Estado de Planejamento e Gestão, anteriormente ocu-\npado por Luis Henrique Ferreira de Aquino, ID Funcional nº 1914315-\n0. Processo nº SEI-120001/014825/2020.',
 'EXONERAR, com validade a contar de 16 de novembro de 2020,\nLUIS HENRIQUE FERREIRA DE AQUINO, ID FUNCIONAL Nº\n1914315-0, do cargo em comissão de Assistente II, símbolo DAI-6, da\nSecretaria de Estado de Planejamento e Gestão. Processo nº SEI-\n120001/014825/2020.']

你可以试试这个:

text='da Secretaria de Estado de Planejamento e Gestão'

REGEX_text=re.compile(re.sub('\s','\\s+',f'{text}'), re.IGNORECASE)
REGEX_paragraph=re.compile(r'^((?:[^\n]+\n)+)',flags=re.MULTILINE)

filtered_Paragraphs= [x for x in REGEX_paragraph.findall(data) if REGEX_text.search(x)]
for paragraph in filtered_Paragraphs:
    print(paragraph)

通知:

  • data 是你的 text-example.
  • REGEX_text 在 exec re.compile.
  • 之后成为 da\s+Secretaria\s+de\s+Estado\s+de\s+Planejamento\s+e\s+Gestão

有关更多信息,请参阅 demo-regex1 and demo-regex2