2015-04-20 4 views
0

Я уже немного в тупике. У меня есть следующая строка:Регулярное выражение в Python - Строка между строкой, исключающей пробелы

LAT: 6.90N LON: 80.58E ELEV: 1097.6M 

Мне нужно извлечь 6.90N, 80.58E и 1097.6M.

Проблема в том, что я перебираю другие файлы с похожими форматами. Есть несколько файлов с отсутствующими значениями или другими символами (т. Е. *****, если значение отсутствует).

Я хочу уметь фиксировать их как можно лучше. Есть ли способ написать регулярное выражение для захвата значений между LAT:, LON: и ELEV: без включения пробелов?

+3

https://regex101.com/r/xJ4sF5/2 – sshashank124

+0

Также проверьте анализ, основанный на потоках. Я нахожу это намного быстрее для подобных вещей. – Josiah

+0

Можете ли вы показать строку, которую вы не хотите сравнивать? Разделяются ли вкладки значений? –

ответ

1

Вам не нужно регулярное выражение для этого:

input_str = 'LAT: 6.90N LON: 80.58E ELEV: 1097.6M' 
# Split into strings separated by whitespace 
parts = input_str.split() 
# Take every other item from the list, skipping the first 
lat, lon, elev = parts[1::2] 

Если каждая строка имеет формат, что он имеет «переменные», разделенных пробелами, но могут быть различные наборы переменных, вы можете просто использовать словарь:

def line_to_dict(input_str): 
    parts = input_str.split() 
    return dict(itertools.izip(parts[::2], parts[1::2])) 
3

Как об этом:

>>> s = "LAT: 6.90N LON: 80.58E ELEV: 1097.6M" 

>>> m = re.findall(r'(\d+\.\d+[A-Z])', s) 

>>> print m 
['6.90N', '80.58E', '1097.6M'] 

разломать

(   # start of capturing group 
\d+   # one or more numbers 
\.   # a dot(escaped) 
\d+   # one or more numbers 
[A-Z]  # a letter 
)   # end of capturing group 
+2

Я думаю, вы могли бы уйти просто с помощью 're.findall (" (\ d + \. \ D + [A-Z]) ", s)' –

+0

@JoranBeasley Правильно. – Totem

1

Учитывая ваш текущий вопрос нет необходимости повторно, и я бы просто сделать это следующим образом:

s = 'LAT: 6.90N LON: 80.58E ELEV: 1097.6M' 
l = s.split() 
if l[1] != '*'*len(l[1]): 
    print(l[1], l[3], l[5]) 
Смежные вопросы