如何仅通过正则表达式获取原始数据第一段的信息?

How to retrieve information in the first section of the raw data only by regular expressions?

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

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('[^-]*?^([^:\-]+?):([^\r\n]*?)$', 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}')

任何人都可以给我任何建议,告诉我应该如何修改我的代码以实现我打算做的事情吗?

这是一种使用正则表达式的方法。我们可以先 trim 使用 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'}