【问题标题】:Extract Multiple Key Value Pairs from a Line从一行中提取多个键值对
【发布时间】:2017-11-07 16:30:46
【问题描述】:

我正在尝试解析文档以构建可搜索的数据。该文档有多个由冒号: 确定的键/值对。有些行在同一行上有多个键/值对。棘手的部分是,除了冒号之外,键名和值的字符串都不一致。例如,冒号和值之间可能有 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"
     }

【问题讨论】:

    标签: python regex parsing


    【解决方案1】:

    只要你可以在键、值和它们之间有任意数量的空格,就无法判断一个值何时结束,下一个键何时开始。以示例文档的最后一行为例:是"Date 1":"1/2/17", "Date 2":"1/2/18" 还是"Date 1": "1/2/17 Date", "2": "1/2/18"。因此,如果没有任何进一步的假设,您就无法在一行中清楚地分隔多个键/值对。

    如果您只有一组固定的可能键,只需将它们添加为标记并查找出现的键标记,后跟“:”。

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

    【讨论】:

    • 我认为我将不得不采用假设和固定键方法(我试图避免),但即使这样也变得非常混乱。我会要求重新格式化文件,但是,这些文件需要处理好几年,所以手动做这样的事情是不可行的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多