当其中包含字符串时,正则表达式匹配完整的段落块
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。
我有一个文本文件,因为如果其中包含一个字符串,我想匹配完整的段落块,但我当前的正则表达式无法匹配包括新行在内的完整段落。
文本示例:
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
在 execre.compile
. 之后成为
da\s+Secretaria\s+de\s+Estado\s+de\s+Planejamento\s+e\s+Gestão
有关更多信息,请参阅 demo-regex1 and demo-regex2。