我在将一个冒号与时间戳值的尾部完全匹配时遇到问题。我想完全匹配此冒号,然后转换为句号。我尝试了几种方法来尝试完全匹配此冒号,但无济于事。
这里是一个示例: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和正则表达式。
编辑:从第三个冒号(例如:)中删除**,以避免混淆。
答案 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'