Search code examples
pythonregexregex-lookaroundsregex-groupregex-greedy

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


I've a text file, from that I want to match the full paragraph block if it contains a string inside it but my current regex doesn't work to match full paragraph including the new line.

Text Example:

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.

From the above text block I want to match the full paragraph if it contains da Secretaria de Estado de Planejamento e Gestão So the expected output is to get all of the paragraphs because all of them contains the that sentence either in a single line or multi line

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.

What I have tried

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)

My Current Output:

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

Two issue with this output, first of all it doesn't match full paragraph block here and then not taking all of the blocks where the sentence exists either in single line or multi line.


Solution

  • One way without using re:

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

    Output:

    ['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.']