Как я могу получить числа в отформатированной строке, как показано ниже в 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
.