gpt4 book ai didi

python - 将多个正则表达式匹配附加到列表列表

转载 作者:行者123 更新时间:2023-12-04 15:04:14 27 4
gpt4 key购买 nike

txt = '0    Marriage of MARY ROCHE
1 in 1880
2 Group Registration ID\tN/R
3 SR District/Reg Area\tCork
4 Returns Year\t1880
5 Returns Quarter\t4
6 Returns Volume No\t5
7 Returns Page No\t0110
8 Marriage of MARY ROCHE
9 in 1880
10 Group Registration ID\tN/R
11 SR District/Reg Area\tEnniscorthy
12 Returns Year\t1880
13 Returns Quarter\t3
14 Returns Volume No\t4
15 Returns Page No\t276"

以上是婚姻记录数据集的片段。每8行对应一个新的女性记录。我正在尝试通过正则表达式提取关键详细信息(年、地区、季度、数量、页码)。

 year = re.compile(r'in\s\d{4}')
area = re.compile(r'Area\t[A-Za-z]+(?:\s[A-Za-z]+)*$')
fdata = []
file = open('C:\\Downloads\\mary_roche.txt', 'r')
for line in file:
year_matches = year.finditer(line)
area_matches = area.finditer(line)
for a in area_matches:
for y in year_matches:
fdata.append([y.group(),a.group()])


print(len(fdata))
print(fdata)

当我单独使用这些表达式时,它们有效,但是当我尝试将这两个表达式添加到列表列表时,我什么也得不到。我的最终目标是为所有五个关键细节创建表达式并以有序的方式存储它们,即 [[woman1]、[woman2]、[woman3]...等]

非常感谢这里的任何帮助。干杯!

最佳答案

for 循环的逻辑只有两个怪癖。

  • 您尝试了对每一行的匹配,但是由于没有一行同时包含地区和年份,所以您一无所获。解决方法:将数据集作为一个整体进行操作即可。
  • 您可以针对一个区域遍历所有年份;这样,在第一个找到的区域之后,全年的火柴都会被消耗掉。补救措施:对于每个区域,只进行一年匹配。
area = re.compile(r'Area\t[A-Za-z]+(?:\s[A-Za-z]+)*$', re.M)

file = open('C:\\Downloads\\mary_roche.txt', 'r').read()
year_matches = year.finditer(file)
area_matches = area.finditer(file)
for a in area_matches:
y = next(year_matches)
fdata.append([y.group(), a.group()])

请注意,我们需要带有 $re.MULTILINE 标志,因为 file 字符串现在有多行。

当然我们可以缩短它,只写:

fdata = [*zip(year.findall(file), area.findall(file))]

关于python - 将多个正则表达式匹配附加到列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66457416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com