我正在尝试解析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
答案 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']]]
没有正则表达式!
据我所知,正则表达式不可能智能地解析任意嵌套文本。