gpt4 book ai didi

regex - 以正则表达式匹配小时/分钟/秒-更好的方法?

转载 作者:行者123 更新时间:2023-12-04 09:56:53 32 4
gpt4 key购买 nike

因此,我需要从以下条目中减去小时,分钟和秒钟:

  • 04:43:12
  • 9.43.12
  • 1:00
  • 01.04
  • 59
  • 09

  • 前两个是小时,分钟和秒。
    旁边是分钟和秒。
    最后两个只是几秒钟。

    我想出了这个正则表达式,可以用..:
    \A(?<hours>\d{1,2})(?::|\.)(?<minutes>\d{1,2})(?::|\.)(?<seconds>\d{1,2})\z|\A(?<minutes>\d{1,2})(?::|\.)(?<seconds>\d{1,2})\z|\A(?<seconds>\d{1,2})\z

    但这很丑陋,我想将其重构为3种不同的表达方式(主要是为了学习)。我尝试了这个:
    \A(?:(?<hours>\d{1,2})(?::|\.){0,1})(?:(?<minutes>\d{1,2})(?::|\.){0,1})(?:(?<seconds>\d{1,2}){0,1})\z

    但这是行不通的-有时几分钟和几秒就搞砸了。我的大脑在受伤,我无法弄清楚我在做什么错。

    最佳答案

    我的建议:

    (?:(?:(?<hh>\d{1,2})[:.])?(?<mm>\d{1,2})[:.])?(?<ss>\d{1,2})

    结构化的:
    (?:                     # group 1 (non-capturing)
    (?: # group 2 (non-capturing)
    (?<hh>\d{1,2}) # hours
    [:.] # delimiter
    )? # end group 2, make optional
    (?<mm>\d{1,2}) # minutes
    [:.] # delimiter
    )? # end group 1, make optional
    (?<ss>\d{1,2}) # seconds (required)

    如果愿意,可以将正则表达式包装在定界符中-例如单词边界 \b或字符串 anchor ( ^$)。

    编辑:考虑一下,您可以进一步限制它以捕获仅有意义的时间。用
    [0-5]?\d

    代替
    \d{1,2}

    仅在适当的位置(秒和分钟)捕获0到59之间的值。

    关于regex - 以正则表达式匹配小时/分钟/秒-更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400297/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com