正则表达式为下面提到的表达式建模

时间:2015-07-09 00:12:13

标签: python regex python-2.7

++++++++++++++++++++++++++++++++++++++++++++++++   
| SITE | Morning | Afternoon | Evening | Night |  
++++++++++++++++++++++++++++++++++++++++++++++++  
| Long 144 - Lat 18  | 100 | 150 | 10  | 5 |  
++++++++++++++++++++++++++++++++++++++++++++++++   
| Long 161 - Lat 122 |   100   |   |   | 5 |  
++++++++++++++++++++++++++++++++++++++++++++++++  
| Long 100 - Lat 134 |   100   |   | 5 |   |  
++++++++++++++++++++++++++++++++++++++++++++++++  
| Long 190 - Lat 14  |    |    | 158 |  5  |  

由于我没有看到一种模式,所以我不知道如何建模正则表达式以从现场,早晨,下午,傍晚和夜晚提取值。例如,我的正则表达式应该能够刮掉(' Long 144 - Lat 18',' 100',' 150'' 10', ' 5')来自第一行和(' Long 161 - Lat 122',' 100',''' ',' 5')来自第二行,依此类推。我能够抓住网站'专栏,但不能想到一个模型来刮掉其余部分。主要的是我没有" |"," +"和" NULL"在我的数据中,我只是在这个问题中使用它们来使它有点清楚,它们都被原始数据中的空格所取代。任何帮助是极大的赞赏。对于丑陋的图案我很抱歉,我试着让它看起来很漂亮 修改: Data description pic here

1 个答案:

答案 0 :(得分:1)

数据只是固定位置格式;这很容易处理。

您希望完全读取每一行,然后根据列位置拆分该行。不是通过正则表达式或使用.split()

,例如,简单版本:

with open("data.txt") as infile:
    for line in infile:
         longitude = float(line[5:10])
         latitude = float(line[15:20])
         morning = line[25:30]
         # See if there's data, otherwise assign a default
         morning = float(morning) if morning.strip() else 0
         # Ditto for afternoon, evening, night

在本例中,列限制显然是随机选择的;它可以很容易地用正确的数据文件找出它们。