Python正则表达式数据搜索

2024-03-29 11:08:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着分析一个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

Tags: 文件数据方法名称标题编码data名字
1条回答
网友
1楼 · 发布于 2024-03-29 11:08:59

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

(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)

输出:

^{pr2}$

没有正则表达式!在

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

相关问题 更多 >