如何在时间戳中精确匹配一个冒号并将其转换为句点?

时间:2019-02-01 16:19:37

标签: python regex

我在将一个冒号与时间戳值的尾部完全匹配时遇到问题。我想完全匹配此冒号,然后转换为句号。我尝试了几种方法来尝试完全匹配此冒号,但无济于事。

这里是一个示例: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和正则表达式。

编辑:从第三个冒号(例如)中删除**,以避免混淆。

3 个答案:

答案 0 :(得分:0)

如果不是必需的正则表达式,则可以将str.rsplit()maxsplit选项一起使用:

>>> s = '02:44:05**:**406'
>>> '.'.join(s.rsplit(':', 1))
02:44:05**.**406

答案 1 :(得分:0)

您需要此作为正则表达式

r'^(.*):'

匹配尽可能多的字符,直到最后:并捕获它们

那么您的替代名称应该是

'\1.'

所有捕获的东西后跟一个点

所以您的代码看起来像

re.sub(r'^(.*):', '\1.', text)

答案 2 :(得分:0)

您可以使用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'