Это можно решить с помощью регулярного выражения:
import re
line = '4743 i03/2064.034764 i03/2021.304745*i03/29111.854765 i03/2592.50'
line = re.sub(r'(\..{2})', r'\1,', line)
print(line)
Вывод:
4743 i03/2064.03,4764 i03/2021.30,4745*i03/29111.85,4765 i03/2592.50,
Однако обратите внимание, что последняя группировка также вернет .50,
, поскольку она все равно будет совпадать данные правила в вашем вопросе.
Вы можете прочитать о Регулярном выражении здесь .
Давайте разберем, что происходит внутри re.sub
function.
В документации для команды мы видим, что она имеет следующие параметры:
re.sub(pattern, repl, string, count=0, flags=0)
Давайте посмотрим на нашу pattern:
r'(\..{2})'
Во-первых, мы устанавливаем строку в строку raw
, добавляя префикс r
перед его созданием. Вы можете прочитать об этом здесь . Короткая версия: он говорит нам, что такие символы, как \
, должны интерпретироваться как буквальный символ обратного хода sh.
Затем мы создаем capture-group
, окружив наш шаблон ()
. После чего мы escape
.
с обратным символом sh, потому что в регулярном выражении .
совпадает со всеми символами (если вы используете правильные флаги).
Итак, теперь у нас есть это r'(\.)'
, который совпадает с литералом .
в строке. Тем не менее, мы также хотим сопоставить с двумя последними символами впоследствии.
Мы делаем это с помощью .
, о котором мы упоминали ранее, сопоставляет все символы, однако мы говорим, чтобы оно совпадало с двумя символами, добавляя суффикс {2}
после точки.
Теперь у нас есть полный шаблон: r'(\..{2})'
Теперь мы хотим использовать этот шаблон и заменить его на что-то другое.
Мы сделайте это с шаблоном замены: r'\1,'
\1
здесь обратная ссылка на группу захвата, которую мы создали ранее, и содержит буквальную точку, за которой следуют два символа. После того, как мы перезвоним эту соответствующую строку, мы добавляем ,
после нее.
Наконец, мы говорим команде re.sub
принять line
в качестве входной строки для команды.
В Интернете есть много ресурсов, где вы можете выучить регулярные выражения. Если вы хотите поэкспериментировать с описанным выше шаблоном, я создал для вас ссылку здесь , где вы можете лучше повесить его.