python 中的正则表达式用于时间格式后跟逗号和三位数字

Regex in python for time format followed by comma and three digits

我有一个包含数千种时间格式的文件。其中一些采用标准格式,而另一些则后跟一个逗号和三个数字,如下所示:

    Standard format: 00:00:44
    Followed by comma and three digits: 00:00:46,235

我已经使用以下正则表达式删除了标准格式:

   text = re.sub(r'^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)', '', text)

没关系。但是对于时间格式后跟逗号和三位数字,到目前为止我没有尝试过帮助我删除它们。请问,我怎样才能删除这个奇怪的时间格式模式?

快速而肮脏的方法是使用 split():

text = text.split(",")[0]
text = re.sub(r'^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)', '', text)

您还可以更新您的正则表达式以在末尾添加一个可选部分。

text = re.sub(r'^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d),?\d{0,3}$', '', text)

使用re.sub:

inp = "Followed by comma and three digits: 00:00:46,235"
output = re.sub(r'\b(\d{2}:\d{2}:\d{2}),\d{3}', r'', inp)
print(output)  # Followed by comma and three digits: 00:00:46

您的正则表达式符合标准时间格式。

r'^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)'

只需在末尾添加逗号部分,并将其设为可选。

r'^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:,\d{3})?$)'

(?:,\d{3})? 的解释:

(?:      )     Non-capturing group
   ,\d{3}      Comma, then three digits
          ?    Match zero or one times