如何仅通过正则表达式检索原始数据的第一部分中的信息?



下面是我的代码将通过正则表达式处理的原始数据示例:

raw_data = '''
name        :   John
age         :   26
gender      :   male
occupation  :   teacher
Father
---------------------
name        :   Bill
age         :   52
gender      :   male
Mother
---------------------
name        :   Mary
age         :   48
gender      :   female
'''

我想从原始数据中检索以下部分信息并将其存储在字典中:

dict(name = 'John', age = 26, gender = 'male', occupation = 'teacher')

然而,当我像下面这样运行代码时,它并没有像我期望的那样工作:

import re
p = re.compile('[^-]*?^([^:-]+?):([^rn]*?)$', re.M)
rets = p.findall(raw_data)
infoAboutJohnAsDict = {}
if rets != []:
for ret in rets:
infoAboutJohnAsDict[ret[0]] = ret[1]
else:
print("Not match.")
print(f'rets = {rets}')
print(f'infoAboutJohnAsDict = {infoAboutJohnAsDict}')

谁能给我任何建议,我应该如何修改我的代码,以实现我打算做什么?

下面是使用正则表达式的一种方法。我们可以先去掉输入的后一部分你不想用re.sub。然后,使用re.findall查找John的所有键值对,并转换为字典。

raw_data = re.sub(r's+w+s+-+.*', '', raw_data, flags=re.S)
matches = re.findall(r'(w+)s*:s*(w+)', raw_data)
d = dict()
for m in matches:
d[m[0]] = m[1]
print(d)
# {'gender': 'male', 'age': '26', 'name': 'John', 'occupation': 'teacher'}

最新更新