下面是我的代码将通过正则表达式处理的原始数据示例:
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'}