gpt4 book ai didi

python - 如何匹配正则表达式中可能存在或不存在但如果匹配项不存在则具有占位符的字符串

转载 作者:行者123 更新时间:2023-11-28 18:06:33 26 4
gpt4 key购买 nike

假设我有一个如下形式的大文本文件

[Surname: "Gordon"]
[Name: "James"]
[Age: "13"]
[Weight: "46"]
[Height: "12"]
[Quote: "I want to be a pilot"]

[Name: "Monica"]
[Weight: "33"]
[Quote: "I am looking forward to christmas"]

一共有 8 个键,它们总是按照我的“姓氏”,“姓名”,“年龄”,“体重”,“高度”,“学校”,“ sibling ”,“报价”的顺序排列事先知道。如您所见,某些配置文件没有完整的变量集。您唯一可以确定的是名称。

我想创建一个 pandas 数据框,每个观察作为一行,每一列作为键。就詹姆斯而言,由于他没有“学校”和“ sibling ”中的条目,我希望这些单元格的条目是 numpy nan 对象。

我的尝试是对每个变量使用类似 (?:\[Surname:\"()\"\]) 的东西。但即使是单一的姓氏,我也会遇到问题。如果姓氏不存在,它只返回空列表而不返回占位符。

更新:

例如,我希望莫妮卡个人资料的返回是('','莫妮卡','','33','','','','我期待圣诞节')

最佳答案

您可以解析文件数据,对结果进行分组,然后传递给数据框:

import re
import pandas as pd
def group_results(d):
_group = [d[0]]
for a, b in d[1:]:
if a == 'Name' and not any(c == 'Name' for c, _ in _group):
_group.append([a, b])
elif a == 'Surname' and any(c == 'Name' for c, _ in _group):
yield _group
_group = [[a, b]]
else:
if a == 'Name':
yield _group
_group = [[a, b]]
else:
_group.append([a, b])
yield _group

headers = ["Surname","Name","Age","Weight","Height","School","Siblings","Quote"]
data = list(filter(None, [i.strip('\n') for i in open('filename.txt')]))
parsed = [(lambda x:[x[0], x[-1][1:-1]])(re.findall('(?<=^\[)\w+|".*?"(?=\]$)', i)) for i in data]
_grouped = list(map(dict, group_results(parsed)))
result = pd.DataFrame([[c.get(i, "") for i in headers] for c in _grouped], columns=headers)

输出:

  Surname    Name                ...                 Siblings                              Quote
0 Gordon James ... I want to be a pilot
1 Monica ... I am looking forward to christmas

[2 rows x 8 columns]

关于python - 如何匹配正则表达式中可能存在或不存在但如果匹配项不存在则具有占位符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134204/

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