任何从 txt 文件中分割摘要的正则表达式问题

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

我正在尝试从 txt 文件中提取一些内容(来自 pdf 转换)。 您可以注意到标签后面或 page_number 之前有空格(或没有空格),有时,没有空格 page_number 和 X.Y.Z 代码之间 这是一个示例:

> Summary
30.1.3.1. Boite à eau................................................................................................................................................. 29 
30.1.3.2. Descentes d’eaux pluviales en façades ....................................................................................................30 
30.1.3.3. Lanterneau de désenfumage.....................................................................................................................30 30.1.3.4. Etanchéité résine.......................................................................................................................................31 

稍后在同一个文档中:

摘要的结构是:

> X.Y.Z. Label ................................... Page_number

在同一份文件中我们可以看到:

> X.Y.Z. Label : Description etc ......

我的用例是将 X.Y.Z 标签放入 python 字典中作为仅来自摘要的键并将描述与此相关联。 我尝试了这个正则表达式,这是我能得到的最好结果,但它不是最好的:

(\d+[.])(.*)?[.]*\s*\d+

我的问题是关于点管理、标签提取和 失踪了。

你能帮帮我吗?

python regex text
1个回答
0
投票

IIUC,您可以使用

re.findall
(\d+(?:\.\d+)*\.) (.*?)\.* ?(\d+)

import re

txt = '''Summary
30.1.3.1. Boite à eau................................................................................................................................................. 29 
30.1.3.2. Descentes d’eaux pluviales en façades ....................................................................................................30 
30.1.3.3. Lanterneau de désenfumage.....................................................................................................................30 30.1.3.4. Etanchéité résine.......................................................................................................................................31 '''

out = re.findall(r'(\d+(?:\.\d+)*\.) (.*?)\.* ?(\d+)', txt)

out2 = {k: t for k, *t in out}

输出:

# out
[('30.1.3.1.', 'Boite à eau', '29'),
 ('30.1.3.2.', 'Descentes d’eaux pluviales en façades ', '30'),
 ('30.1.3.3.', 'Lanterneau de désenfumage', '30'),
 ('30.1.3.4.', 'Etanchéité résine', '31')]

# out2
{'30.1.3.1.': ['Boite à eau', '29'],
 '30.1.3.2.': ['Descentes d’eaux pluviales en façades ', '30'],
 '30.1.3.3.': ['Lanterneau de désenfumage', '30'],
 '30.1.3.4.': ['Etanchéité résine', '31']}
© www.soinside.com 2019 - 2024. All rights reserved.