Извиняюсь, если на этот вопрос уже был дан ответ - я попытался найти его, но, возможно, мои условия поиска (такие же, как у моего названия) были неверными.
Давайте предположим, что у меня есть строка, подобная этой, которую я не вижуя не могу контролировать:
astr = "A 5.02654824574 (14.710000000000008, -19.989999999999995, -0.8) <-> s[10]: A 5.02654824574 (-29.11999999999999, 52.78, -0.8)"
Я хотел бы обработать эту строку, чтобы плавающие в ней отображались с произвольным количеством точности с плавающей точкой - скажем, 3 десятичных знака.Так как это будет работать на уровне строки, я не ожидал бы, что процесс будет учитывать правильное округление - просто для удаления символов строки десятичной запятой.
Я знаю, что мог бы сделать, согласно Python: извлечение нескольких чисел с плавающей точкой из строки :
import re
p = re.compile(r'\d+\.\d+')
for i in p.findall(astr): print i
... которая печатает:
5.02654824574
14.710000000000008
19.989999999999995
0.8
5.02654824574
29.11999999999999
52.78
0.8
.... однако я теряюсь прикакое регулярное выражение захватывает, что мне нужно сделать при поиске и замене, например, для n_float_precision_decimals = 4
, - я получу эту строку в качестве вывода (с указанной выше строкой в качестве ввода):
"A 5.0265 (14.7100, -19.9899, -0.8) <-> s[10]: A 5.0265 (-29.1199, 52.78, -0.8)"
Итакв основном, регулярное выражение будет учитывать, что если уже есть меньшее количество десятичных знаков, оно вообще не будет усекать десятичные дроби.
Возможно ли это сделать в одной операции re.sub
безвам приходится писать явные циклы for
, как описано выше, и вручную создавать строку вывода?