【问题标题】:Regex in python for time format followed by comma and three digitspython中的正则表达式用于时间格式,后跟逗号和三位数字
【发布时间】:2021-10-12 16:15:46
【问题描述】:

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

    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)

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

【问题讨论】:

    标签: python regex python-re


    【解决方案1】:

    您的正则表达式匹配标准时间格式。

    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
    

    【讨论】:

    • 谢谢@Pranav,您的正则表达式同时解决了两种时间格式。再次,非常感谢。
    • 感谢您的解释,@Pranav!真的非常非常有帮助!
    • @CygnusX-1 不用担心,很高兴为您提供帮助 :)
    【解决方案2】:

    快速而肮脏的方法是使用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)
    

    【讨论】:

    • Python(和IRL)秒内可以以6开头。
    • 谢谢@Nathaniel。
    • @KlausD 这是有效的,尽管对 OP 可能有更好的评论?不过,如果没有更多上下文(这些数字来自哪里?正则表达式是否用于过滤不良数据?)我很难确定是否包含它。
    【解决方案3】:

    使用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'\1', inp)
    print(output)  # Followed by comma and three digits: 00:00:46
    

    【讨论】:

    • 谢谢你,@Tim。
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多