gpt4 book ai didi

正则表达式匹配错误的可选组

转载 作者:行者123 更新时间:2023-12-04 09:25:38 26 4
gpt4 key购买 nike

我正在尝试匹配时间格式。时间可以写成可选的小时、分钟和毫秒。唯一需要的值是秒。所以所有这些时间都写得正确,应该匹配。

10:11:12.123 '10 hours, 11 minutes, 12 seconds and 123 milliseconds
10:11:12 '10 hours, 11 minutes and 12 seconds
11:12.123 '11 minutes, 12 seconds and 123 milliseconds
11:12 '11 minutes and 12 seconds
12.123 '12 seconds and 123 milliseconds
12 '12 seconds
我的正则表达式如下所示: (?:(?:(\d*):)?(?:(\d*):)?(\d*)(?:\.(\d*))?)我希望每个组都对应正确的值。所以第 1 组应该总是返回小时,第 2 组应该总是返回分钟,等等......我在 Regex101 中尝试过这个但是正如您在这些结果中看到的那样,当没有时间进行游戏时,第 1 组总是优于第 2 组。它匹配时间 11:12完美,但它放置 11在第 1 组中告诉我这是几小时而实际上是几分钟。这并不奇怪,因为该字符串中的分钟数与第 1 组匹配。但这不是我想要的。
如何确保每个组始终对应正确的时间部分?我可以以某种方式将第 2 组优先于第 1 组吗?

最佳答案

您可以将第一个可选组移动到第二个可选组中,以便在一个贪婪匹配组中立即连续尝试它们:

(?:(?:(\d+):)?(\d+):)?(\d+)(?:\.(\d+))?
^^^^^^^^^^^
regex demo
详情
  • (?:(?:(\d+):)?(\d+):)? - 一个可选的非捕获组匹配一次或零次出现:
  • (?:(\d+):)? - 可选的非捕获组匹配并将任何一个或多个数字捕获到组 1 中,然后仅匹配 :
  • (\d+) - 第 2 组:一位或多位数字
  • : - 冒号

  • (\d+) - 第 3 组:一位或多位数字
  • (?:\.(\d+))? - 一个可选的非捕获组匹配一个点,然后将一个或多个数字捕获到组 4 中。
  • 关于正则表达式匹配错误的可选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63022249/

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