Как сопоставить ровно одно двоеточие в метке времени и преобразовать его в точку? - PullRequest
0 голосов
/ 01 февраля 2019

У меня проблема с сопоставлением ровно одного двоеточия в хвостовой части значения метки времени.Я хочу точно сопоставить это двоеточие, а затем преобразовать в точку.Я пробовал несколько способов точно подобрать это двоеточие, но безрезультатно.

Вот пример: 02: 44: 05: 406 -> 02: 44: 05.406

Я создалследующее регулярное выражение:: \ d + $ -> это будет соответствовать: 406 к концу отметки времени.

Я пробовал другой подход: \ d +: \ d + $ -> это соответствует 02:44, 44:05, 05: 406

Я даже попробовал это: [^ \ d +] -> это соответствует всем трем двоеточиям:

Однако я хочу последнее двоеточие - 02:44:05:406 и замените его на «.»

Есть идеи, как это сделать?Я использую Python 3 и регулярные выражения.

EDIT: удаление ** из третьего двоеточия (например, : ), чтобы избежать путаницы.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вам нужно это как регулярное выражение

r'^(.*):'

Подберите как можно больше символов до последнего : и захватите их

Тогда ваша замена должна быть

'\1.'

все захваченные материалы, за которыми следует точка

, поэтому ваш код выглядит как

re.sub(r'^(.*):', '\1.', text)
0 голосов
/ 01 февраля 2019

Вы можете использовать str.rpartition , чтобы разбить строку на последнем двоеточии, затем str.join , чтобы создать новую строку.

>>> ts = '02:44:05:406'
>>> a, sep, b = ts.rpartition(':')
>>> res = '.'.join((a, b))
>>> res
'02:44:05.406'

ИлиВы можете использовать форматирование строки для создания новой строки:

>>> res = '{}.{}'.format(a, b)
>>> res
'02:44:05.406'
0 голосов
/ 01 февраля 2019

Если регулярное выражение не является обязательным, вы можете просто использовать str.rsplit() с параметром maxsplit:

>>> s = '02:44:05**:**406'
>>> '.'.join(s.rsplit(':', 1))
02:44:05**.**406
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...