<p>我要做几个假设:
1) 你可能再也不会使用这个代码了
2) 只有几种可能的格式</p>
<p>我不会费心为这个制定一个RE,因为它不需要如此强大。(见假设1)。在</p>
<p>我可能会设法找出一些方法来确定我正在阅读的特定行使用的格式。然后使用一些if语句,通过适当的定界步骤将其发送到,以获得所需的字段顺序。(见假设2)。在</p>
<p>我很快就想出了一个例子,你显然需要做很多改变才能使它适合你的情况,但是你明白了。最困难的部分可能是找出一种方法来决定使用哪个解码器…我在我的例子中使用了“标签的位置”。在</p>
<pre><code>def decoder1(line):
parts = line.split("\t")
d1, d2 = parts[0].split(",")
d3, d4, d5, d6, d7, d8, d9 = parts[1].split(",")
return [d1, d2, d3, d4, d5, d6, d7, d8, d9]
def decoder2(line):
parts = line.split("\t")
d1 = parts[0]
d2, d3, d4, d5, d6, d7, d8, d9 = parts[1].split(",")
return [d1, d2, d3, d4, d5, d6, d7, d8, d9]
def decoder3(line):
parts = line.split("\t")
d1, d2, d3, d4, d5, d6, d7 = parts[0].split(",")
d8, d9 = parts[1].split(",")
return [d1, d2, d3, d4, d5, d6, d7, d8, d9]
if __name__ =="__main__":
lines = [
"1,2\t3,4,5,6,7,8,9",
"1\t2,3,4,5,6,7,8,9",
"1,2,3,4,5,6,7\t8,9"
]
for line in lines:
tablocation = len((line.split("\t")[0]).split(","))
if tablocation == 2:
res = decoder1(line)
elif tablocation == 1:
res = decoder2(line)
elif tablocation == 7:
res = decoder3(line)
else:
print "Must be a new format for %s" %line
res = "NA"
print res
</code></pre>
<p>如果你有更多的“解码器选项”,那么花时间开发一些REs可能是值得的,但是如果你不知道所有可能的变化,很难提供比我在上面的方法中展示的更多的帮助。在</p>