Python正则表达式数据搜索

时间:2013-06-24 14:17:52

标签: python regex excel

我正在尝试解析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

1 个答案:

答案 0 :(得分:0)

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

(python 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']]]

没有正则表达式!

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