如何在python中将正则表达式模式hh:mm:ss替换为hh:mm



如果这是一个简单的问题,我很抱歉,但我有一个具有不同时间格式的csv文件,如下所示:hh:mmhh:mm:ss

文件的摘录如下:

column_name
00:00:00
01:00:00
05:00
02:00:00
03:00:00
06:00
...
23:00:00
00:00:00

我有下面的正则表达式来匹配所有这些时间[0-9]{2}[:][0-9]{2}[:][0-9]{2}

我的问题是如何去掉hh:mm:ss格式的冒号和秒(:ss(,但保持hh:mm格式不变。本质上只更改中的一种格式hh:mm:sshh:mm,以便它们都是python脚本中的hh:mm格式?

我试着用这条线:

df['column_name'] = [re.sub(r'[0-9]{2}[:][0-9]{2}[:][0-9]{2}', r'[0-9]{2}[:][0-9]{2}', str(x)) for x in df['column_name']]

但这一切都改变了,变成了[0-9]{2}[:][0-9]{2}

我也尝试过只使用[:-3]之类的切片,但我无法使其工作:

df['column_name'] = [re.sub(r'[0-9]{2}[:][0-9]{2}[:][0-9]{2}', [:-3], str(x)) for x in df['column_name']]

任何帮助都将不胜感激,谢谢

EDIT我之前认为@RJ Adriaansen的答案是正确的,但经过仔细检查,它还更改了需要保持不变的hh:mm格式,这意味着它必须使用regex,因此@Haleemur Ali的答案是为我解决问题的答案。

您可以使用str:对字符串进行切片

df['column_name'] = df['column_name'].str[:-3]

或者:

df['column_name'] = df['column_name'].str.rsplit(':', 1).str[0]

如果您想使用regex来解决此问题,请使用捕获组:

df.column_name.str.replace(r'(d{2}):(d{2}):(d{2})', r'1:2', regex=True)

要定义捕获组,请将其括在括号中。然后可以使用组索引(从一开始(引用捕获的字符串。

此外,需要注意的是,由于组被称为<group-number>,因此需要使用原始regex字符串。

最新更新