如何用 python 中的 hh:mm 替换正则表达式模式 hh:mm:ss

How to replace regex pattern hh:mm:ss with hh:mm in python

如果这是一个简单的问题,我很抱歉,但我有一个具有不同时间格式的 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']]

非常感谢任何帮助,谢谢

编辑 我以前认为@RJ Adriaansen 的答案是正确的,但经过仔细检查,它还更改了需要保持不变的 hh:mm 格式,这意味着它必须使用正则表达式,因此 @Haleemur Ali 的答案是解决的对我来说。

您可以使用 str:

对字符串进行切片
df['column_name'] = df['column_name'].str[:-3]

或者:

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

如果您想使用正则表达式来解决这个问题,请使用捕获组:

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

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

另外,请务必注意,由于这些组被称为 \<group-number>,因此需要使用原始正则表达式字符串。