-1

我正在尝试解析一个excel文件。在这个包含特定设备名称的 Excel 文件中有某些“标题”(它们位于单元格内)。这些名称中的每一个都包含一个用括号括起来的首字母缩写词。每个“标题”之间都有空格,该设备的数据位于两个设备之间。但是,并非所有“标题”都位于同一列中,因此我不能只扫描一个硬编码列。

我希望能够解析标头的 excel 文件,然后扫描设备的数据。移动到下一个设备并重复。我在想使用搜索括号的正则表达式将是一种可行的方法。我通常很难想出正则表达式,如果有人可以为我指明一个好例子的方向,或者可以写一个很棒的例子。此外,如果有人能想到更好的方法来解析这个 excel 文件,我将不胜感激。

Header_A [HDA]
    data
    data
    data
    data
Header_B [HDB]
    data
    data
    data
    data
    Header_C [HDC]
        data
        data
        data
        data
4

1 回答 1

0

好吧,这可能会过度拟合您的样本,但它确实适合您的样本:

(蟒蛇3)

sample= '''Header_A [HDA]
    data
    data
    data
    data
Header_B [HDB]
    data
    data
    data
    data
    Header_C [HDC]
        data
        data
        data
        data'''

lines=[{'raw':x} for x in sample.split('\n')]
largestIndent=0
for line in lines:
    line['indent']= (len(line['raw'])-len(line['raw'].lstrip()))//4
    line['content']= line['raw'].lstrip()
    if line['indent']>largestIndent:
        largestIndent=line['indent']
lines=[{'indent':-1, 'content':'', 'raw':''}] + lines

for depth in range(largestIndent,-1,-1):
    print ('depth={}'.format(depth))
    #print ('lines before ={}'.format(lines))
    children=[]
    for line in lines[::-1]:
        if line['indent']==depth:
            children=[line['content']]+children
        elif line['indent']==depth-1:
            if children !=[]:
                line['content']=[line['content']] + children
            children=[]
        else:
            pass
    #print ('lines after ={}'.format(lines))

outList=lines[0]['content'][1:]

print(outList)

输出:

[['Header_A [HDA]', 'data', 'data', 'data', 'data'], ['Header_B [HDB]', 'data', 'data', 'data', 'data', ['Header_C [HDC]', 'data', 'data', 'data', 'data']]]

没有正则表达式!

据我所知,不可能使正则表达式智能地解析任意嵌套的文本。

于 2013-06-24T18:59:16.630 回答