gpt4 book ai didi

"timer"句型的正则捕获组

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

我正在尝试编写一个正则表达式,它允许我解析和修改可能包含为特定操作计时的指令的字符串,使用捕获组来识别输入中的“小时”、“分钟”和“秒”值字符串。

在 ruby​​ 中,我有一个正则表达式,它接近我需要的匹配和捕获组

(?<hour_digit>\d+\s)[a-z]*\s?hour[s\b|b\s]|(?<minute_digit>\d+\s)[a-z]*\s?minute[s\b|b\s][a-z]*|(?<second_digit>\d+\s)[a-z]*\s?second[s\b|b]

我想找到一个可以捕获多个值可以匹配的字符串的表达式,而不是独立匹配; “5 小时 15 分钟”应该是一场比赛,“30 分钟到 1 小时”应该是一场比赛。当前正则表达式的视觉匹配是这样的: enter image description here

最佳答案

你可以使用

(?<!\w)\b(?:(?<hour_digit>\d+)(?:\s*(?:more|another))?\s*hours?)?(?:(?:\s*(?:or|up to|and|to))*\s*(?<minute_digit>\d+)(?:\s*(?:more|another))?\s*minutes?)?(?:(?:\s*(?:or|up to|and|to))*\s*(?<second_digit>\d+)(?:\s*(?:more|another))?\s*seconds?)?\b(?!\w)

参见 regex demo . 详细信息:

  • (?<!\w)\b - 左侧单词边界([[:<:]]\<\m 在某些风格中这样做)
  • (?:(?<hour_digit>\d+)(?:\s*(?:more|another))?\s*hours?)? - 可选的出现
    • (?<hour_digit>\d+) - 组“hour_digit”:一个或多个数字
    • (?:\s*(?:more|another))? - 可选出现零个或多个空格,然后是 moreanother单词
    • \s*hours? - 零个或多个空格,hourhours
  • (?:(?:\s*(?:or|up to|and|to))*\s*(?<minute_digit>\d+)(?:\s*(?:more|another))?\s*minutes?)? - 可选的出现
    • (?:\s*(?:or|up to|and|to))* - 零次或多次出现零次或多次空格后跟 or , up , up to , and
    • \s* - 零个或多个空格
    • (?<minute_digit>\d+) - 组“minute_digit”:一个或多个数字
    • (?:\s*(?:more|another))? - 可选出现零个或多个空格,然后是 moreanother单词
    • \s*minutes? - 零个或多个空格,minuteminutes
  • (?:(?:\s*(?:or|up to|and|to))*(?<second_digit>\d+)(?:\s*(?:more|another))?\s*seconds?)? - 可选的出现
    • (?:\s*(?:or|up to|and|to))* - 零次或多次出现零次或多次空格后跟 or , up , up to , and
    • \s* - 零个或多个空格
    • (?<second_digit>\d+) - 组“second_digit”:一个或多个数字
    • (?:\s*(?:more|another))? - 可选出现零个或多个空格,然后是 moreanother单词
    • \s*seconds? - 零个或多个空格,secondseconds
  • \b(?!\w) - 右侧单词边界(在其他一些正则表达式中,它是 \M\>[[:>:]] )。

关于 "timer"句型的正则捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68581238/

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