Azure,
Да я пробовал findall - получил не то, что хотел
#!/usr/bin/env python3
import re
s = "(32, +inf),(3090, 234.2904),(12, 0.0),(491, 13.3952382038e-5),(33, -inf)"
s2 = re.sub( r'\(\d+, \d+\.\d+(e[\+,-]{1}\d+)?\),?' , '' , s )
s3 = re.findall( r'\(\d+, \d+\.\d+(e[\+,-]{1}\d+)?\),?' , s )
print(s)
print(s2)
print(s3)
(32, +inf),(3090, 234.2904),(12, 0.0),(491, 13.3952382038e-5),(33, -inf)
(32, +inf),(33, -inf)
['', '', 'e-5']
Пользователь добавил сообщение 15 Апреля 2016, 09:07:42:
re.findall( '(\(\d+, \d+\.\d+e?[\+,-]?\d*\),?)' , s )
['(3090, 234.2904),', '(12, 0.0),', '(491, 13.3952382038e-5),']
Вот так получаю, что надо, но эта часть вообще не красивая:
e?[\+,-]?\d*
Можно как-то описать, что это один блок и он может быть, а может не быть, типа
(e[\+,-]\d+)?
Просто в таком случае findall выбирает отдельно это выражение и получается
[('(3090, 234.2904),', ''), ('(12, 0.0),', ''), ('(491, 13.3952382038e-5),', 'e-5')]
Пользователь добавил сообщение 15 Апреля 2016, 09:09:27:
И все-таки хотелось бы решить через sub, чтобы потом не тратить процессорное время на ещё одну команду - сбор строки из массива.