从一行提取多个键值对

时间:2017-11-07 16:30:46

标签: python regex parsing

我正在尝试解析文档以构建可搜索的数据。该文档具有多个键/值对,由冒号:确定。某些行在同一行上有多个键/值对。棘手的部分是除了冒号之外,键名和值的字符串都是不一致的。例如,冒号和值之间可能有1个空格或4个空格,每个值都可以包含空格,并且在同一行内的键/值对之间可以有不确定数量的空格。

示例文件:

   Name:   John Smith
   Address: 123 Main St, Some City, ST 12345       Country:  US
   Date 1: 1/2/17 Date 2: 1/2/18

我需要提取:

    {
      "Name"    : "John Smith",
      "Address" : "123 Main St, Some City, ST 12345",
      "Country" : "US",
      "Date 1"  : "1/2/17",
      "Date 2"  : "1/2/18"
     }

1 个答案:

答案 0 :(得分:1)

只要键,值和中间有任意数量的空格,就无法判断值何时结束并且下一个键开始。获取示例文档的最后一行,例如:是"Date 1":"1/2/17", "Date 2":"1/2/18"还是"Date 1": "1/2/17 Date", "2": "1/2/18"。因此,在没有任何进一步假设的情况下,您无法在一条线上清楚地分隔多个键/值对。

如果您只有一组固定的可能键,只需将它们添加为令牌并查找键令牌的出现位置,然后单击“:”。

如果失败,您可以对键和值的格式做出更多假设。例如,您可以假设键始终以字母字符开头。 警告:此类临时假设通常会忽略边缘情况,并可能导致不干净的数据。