Извлечение чисел из форматированных строк с необычными разделителями в Python - PullRequest
0 голосов
/ 27 февраля 2019

Как я могу получить числа в отформатированной строке, как показано ниже в Python?Он имеет смешанную комбинацию разделителей, таких как tab, parenthesis, cm, space и #.

. Я использовал следующий код, но он неправильно разделяет числа.

s = "1.0000e+036 (1.2365e-004,6.3265e+003cm) (2.3659e-002, 2.3659e-002#)"
parts = re.split('\s|(?<!\d)[,.](?!\d)', s)
print(parts)
['1.0000e+036', '(1.2365e-004,6.3265e+003cm)', '(2.3659e-002,', '2.3659e-002#)']

Я пытаюсь извлечь:

[1.0000e+036, 1.2365e-004, 6.3265e+003, 2.3659e-002, 2.3659e-002]

Может ли кто-нибудь любезно помочь?

Обновление:

Iпопытался использовать следующее регулярное выражение, которое не разбивает положительные экспоненциальные числа

s = "1.0000e+036 (1.2365e-004,6.3265e+003cm) (2.3659e-002, 2.3659e-002#)"
match_number = re.compile('-?\ *[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?')
final_list = [float(x) for x in re.findall(match_number, s)]
print(final_list)
[1.0, 36.0, 0.00012365, 6.3265, 3.0, 0.023659, 0.023659]

. Как видно, первое число - 1e36, которое было проанализировано как два числа 1.0 и 36.0.

1 Ответ

0 голосов
/ 27 февраля 2019

Вам не нужно рассматривать эти элементы как разделители.Скорее всего, все, что вам нужно, это регулярное выражение для извлечения всех чисел с плавающей точкой (включая экспоненциальную / инженерную нотацию) и просто игнорирования оставшихся символов.Всеобъемлющие числовые выражения легко доступны в режиме онлайн с помощью простого поиска.

...