如何用 python 中的 hh:mm 替换正则表达式模式 hh:mm:ss
How to replace regex pattern hh:mm:ss with hh:mm in python
如果这是一个简单的问题,我很抱歉,但我有一个具有不同时间格式的 csv 文件,如下所示:
hh:mm
和 hh: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:ss
到 hh: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>
,因此需要使用原始正则表达式字符串。
如果这是一个简单的问题,我很抱歉,但我有一个具有不同时间格式的 csv 文件,如下所示:
hh:mm
和 hh: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:ss
到 hh: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>
,因此需要使用原始正则表达式字符串。