首页 > 解决方案 > 使用正则表达式提取不同行中标题的特定值

问题描述

我有包含多行的文本字符串,每行混合了字符/数字和空格等。

这是几行的样子:

WEIGHT                         VOLUME                    CHARGEABLE                PACKAGES\n                                                             
398.000 KG                     4.999 M3                  833.500 KG                12 PLT\n                                                                                         
MAWB                                    HAWB\n    / MH616 /                                                                                         
8947806753                             ABC20018830\n  

我正在寻找的输出是将上述标头提取为键,并将它们的值提取为字典的值。

{ 
 "WEIGHT": 398.00 KG, 
 "VOLUME" : 4.99 M3,
 "CHAREGABLE" : 833.500 KG,
 "PACKAGES": 12 PLT,
 "MAWB"  : 8947806753,
 "HAWB"  : ABC20018830
} 

我不确定如何从其下的不同行中获取特定字段的值。如果它在同一行,我可以使用模式获取。但不确定如何从不同的行中获取它(该字段的值直接位于不同行的下方)。

标签: pythonregex

解决方案


您可以使用正则表达式轻松地将文本拆分为包含所有字段的列表:

import re

a = "WEIGHT                         VOLUME                    CHARGEABLE                PACKAGES\n                                                                         398.000 KG                     4.999 M3                  833.500 KG                12 PLT\n                                                                                         MAWB                                    HAWB\n    / MH616 /                                                                                           8947806753                             ABC20018830\n"

# Split on 4 (or more) whitespace (leaves the units with the numbers)
data = re.split(r'\s{4,}', a)
print(data)

['重量','体积','可充电','包装','398.000 KG','4.999 M3','833.500 KG','12 PLT','MAWB','HAWB','/ MH616 /' , '8947806753', 'ABC20018830\n']

由于键和值是混合的,因此可能没有一种简单的方法来自动确定哪个是哪个。但是,如果它们始终处于相同的位置,您可以手动将它们挑选出来,例如:

b = {
    # WEIGHT
    data[0]: data[4],
    # VOLUME
    data[1]: data[5]
}

推荐阅读