Regex для анализа списка плавающих чисел в Python

1

Какое лучшее, что нужно для анализа списков плавающих чисел, разделенных пробелом в python?

У меня есть строки такого рода, которые выйдут из источника:

string = "  4    1.6  8.29   0   0  3.55e-15 -1.28e-13   " 

с неизвестным количеством пробелов, разделяющих числа и начало или конец строки.

Обычно я просто использовал numbers = map(float, string.split(" ")) когда я мог гарантировать, что между числами будет только одно пространство, и что в начале или конце строки не будет пробелов. Я не re.split("\s+", string), но кто-то предложил мне использовать re.split("\s+", string) но это не работает, потому что иногда я получаю пустые строки в начале списка.

Я использую сейчас: re.split("\s+") но это не работает, потому что иногда я получаю пустые строки в начале списка.

Я использую сейчас:

res = map(float, re.findall("\d+\S*\d*", string)

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

Какой лучший шаблон регулярного выражения, который всегда будет соответствовать целым числам и числам с плавающей запятой с или без экспоненциальной нотации, чтобы я мог использовать re.findall(patt, string) и безопасно восстановить список чисел?

Теги:
parsing

2 ответа

11
Лучший ответ

Нет регулярного выражения. Просто используйте string.split() без каких-либо аргументов; он будет разделен на любое количество пробелов.

2

Пример использования str.split() с пониманием списка - немного больше Pythonic и IMHO clearer, чем map:

>>> string = "  4    1.6  8.29   0   0  3.55e-15 -1.28e-13   "
>>> floats = [float(x) for x in string.split()]
>>> floats
[4.0, 1.6000000000000001, 8.2899999999999991, 0.0, 0.0, 3.5500000000000001e-15,
 -1.2800000000000001e-13]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню