查找使用正则表达式从字符串中提取文本的模式

2024-10-01 09:19:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我以字符串格式读取数据,如下所示

>>> 26 24 16  Panelboards  10/05/18 26 26 00i  Power Distribution Units – Install  10/05/18

我想将'26 24 16','Panelboards',10/05/18和'26 26 26 00i','Power Distribution Units–Install',10/05/18分离为小节、名称和日期

此外,在每个日期之后,新项目都可以开始。在这种情况下,在2018年5月10日之后,新的小节开始

我已经使用正则表达式过滤掉了子部分,但它在我的数据中创建了非结构化

re.split(r'\d\d \d\d \d\d',sentence)

如果有人有解决方案,可以高效地检索两个项目的这3个功能

此外,由于结构文件中的更改,我不能将两个空格用作正则表达式


Tags: install数据项目字符串re名称格式情况
3条回答

你可以用

\b(?P<subsection>\d+(?:\s+\d\w*)+)\s+(?P<name>.*?)\s+(?P<date>\d{1,2}/\d{1,2}/\d{2})\b

regex demo详细信息

  • \b-字边界
  • (?P<subsection>\d+(?:\s+\d\w*)+)-分组“subsection”:一个或多个数字,然后出现一个或多个空格,后跟一个数字,然后是零个或多个单词字符
  • \s+-一个或多个空格
  • (?P<name>.*?)-组“名称”:零个或多个字符(换行字符除外),尽可能少
  • \s+-一个或多个空格
  • (?P<date>\d{1,2}/\d{1,2}/\d{2})-组“日期”:一个或两个数字,/,一个或两个数字,/,两个数字
  • \b-字边界

见a Python demo

import re
pattern = r"\b(?P<subsection>\d+(?:\s+\d\w*)+)\s+(?P<name>.*?)\s+(?P<date>\d{1,2}/\d{1,2}/\d{2})\b"
text = "26 24 16  Panelboards  10/05/18 26 26 00i  Power Distribution Units – Install  10/05/18"
print([x.groupdict() for x in re.finditer(pattern, text)])

输出:

[
 {'subsection': '26 24 16', 'name': 'Panelboards', 'date': '10/05/18'}, 
 {'subsection': '26 26 00i', 'name': 'Power Distribution Units – Install', 'date': '10/05/18'}
]

尽可能具体:

/^(\d\d \d\d \d\d) +(.+?) +(\d\d\/\d\d\/\d\d)$/

将组1与小节匹配,将2与名称匹配,将3与日期匹配

如果需要先将字符串拆分为每一行,可以将其挂接到日期的末尾:

\/\d\d\s

尝试:

s = """26 24 16  Panelboards  10/05/18 26 26 00i  Power Distribution Units – Install  10/05/18"""

out = re.split(r"\s{2,}", s)
print(out)

印刷品:

['26 24 16', 'Panelboards', '10/05/18 26 26 00i', 'Power Distribution Units – Install', '10/05/18']

编辑:如果要拆分第二项,请使用str.split()maxsplit=1

from itertools import chain

s = """26 24 16  Panelboards  10/05/18 26 26 00i  Power Distribution Units – Install  10/05/18"""

out = re.split(r"\s{2,}", s)
out = list(chain(out[:2], out[2].split(maxsplit=1), out[3:]))
print(out)

印刷品:

['26 24 16', 'Panelboards', '10/05/18', '26 26 00i', 'Power Distribution Units – Install', '10/05/18']

相关问题 更多 >