Например: text =
'123456' => '123.456'
'333' => '333'
'9999999' => '9.999.999'
'123456 567890' => '123.456 567.890'
'price is 5799' => 'price is 5.799'
'he was born in 1966th' => 'he was born in 1966th'
# разбиваем строку на список
lst = text.split(' ')
out_lst = []
for x in lst:
if x.isdigit():
# преобразуем число в список из букв, переворачиваем
# чтобы добавлять "." с конца списка
rev_x = list(str(x))
rev_x.reverse()
# так как будем добавлять "." длина списка увеличится,
# то добавлять будем в новый список
y = []
for i in xrange(0, len(list(str(x)))):
# после каждого третьего символа добавляем "."
if i % 3 == 0 and i > 0:
y.append('.')
y.append(rev_x[i])
y.reverse()
# вывод строки как результат сложения элементов списка
out_lst.append(reduce(lambda n,m: n + m, y))
else:
out_lst.append(x)
# преобразование из списка со строками в одну строку
text = ' '.join(out_lst)
Лучшее решение
import re
re.sub(r'(?<=\d)(?=(\d\d\d)+\b)', '.', str(text))
И еще вариант
txt = 'he was born in 123456789'
words = txt.split()
for word in words:
if word.isdigit():
new_word = '.'.join([word[::-1][i*3:(i+1)*3]
for i in range(((len(word) - 1) // 3) + 1)])
txt = txt.replace(word, new_word[::-1])
print txt
he was born in 123.456.789
Комментариев нет:
Отправить комментарий