2017-01-09 7 views
0

У меня есть текстовый файл, содержащий метеорологические данные, которые включают в себя такие поля, как название станции, широта, температура, давление и т. Д. Все данные станции находятся в одна строка следующаяРазделение целых чисел, поплавков и научных чисел, а также имен с использованием регулярных выражений Python

met = 'KIRKENES (CIV/MIL)    -8.666667  5.350000  5.866667  HORNSUND RIVER  ENAN  7.9999998E-02 93 85 2.0000000E-02 0.1600000  4.9999997E-02  -999.9000  -999.9000  8 7 3 22.50000' 

Это должно быть разделено, чтобы показать их как список всех данных в порядке, то есть.

['KIRKENES (CIV/MIL)', '-8.666667', ... ,'HORNSUND RIVER', 'ENAN', '7.999998E-02', '93', ...., '22.50000'] 

Я попробовал несколько регулярных выражений, но я не получил никакой удачи, к сожалению, Это пример, когда я пытался получить поплавки и только целочисленные:

regex = '^-?\d*(.\d+)?$' 
print re.findall(regex, met) 

но он просто ничего не получает !, также я пробовал это для научных чисел и ничего не получал!

regexSci = 're.findall('/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/', met)' 

Обратите внимание, что я хочу, регулярное выражение, чтобы найти все формы сразу, но, к сожалению, я даже не смог разобрать каждую форму отдельно!

Что я делаю неправильно? и как это сделать?

+1

Как вы можете проверить 'Хорнсунда RIVER' и' ENAN' ли различные поля? –

+0

Не могли бы вы дать дополнительную информацию о формате? Являются ли столбцы фиксированными? – jonrsharpe

+0

- данные в столбце используют одинаковый размер? возможно, вам нужно только нарезание - то есть. 'first_column = met [0:20]' – furas

ответ

2

Из того, что я понимаю, вы можете просто раскол на 2 или более пробелов с re.split():

In [1]: import re 

In [2]: met = 'KIRKENES (CIV/MIL)    -8.666667  5.350000  5.866667  HORNSUND RIVER  ENAN  7.9999 
    ...: 998E-02 93 85 2.0000000E-02 0.1600000  4.9999997E-02  -999.9000  -999.9000  8 7 3 22.50000' 

In [3]: re.split(r"\s{2,}", met) 
Out[3]: 
['KIRKENES (CIV/MIL)', 
'-8.666667', 
'5.350000', 
'5.866667', 
'HORNSUND RIVER', 
'ENAN', 
'7.9999998E-02', 
'93', 
'85', 
'2.0000000E-02', 
'0.1600000', 
'4.9999997E-02', 
'-999.9000', 
'-999.9000', 
'8', 
'7', 
'3', 
'22.50000'] 
+0

Ты действительно гений. Большое спасибо. –

+0

Остерегайтесь, если какое-либо строковое поле когда-либо содержит двойное пространство, результаты не будут такими, как ожидалось. –

 Смежные вопросы

  • Нет связанных вопросов^_^