微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“计时器”句型的正则表达式捕获组

如何解决“计时器”句型的正则表达式捕获组

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

在 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))* - 零个或多个零个或多个空格后跟 orupup toand
    • \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))* - 零个或多个零个或多个空格后跟 orupup toand
    • \s* - 零个或多个空格
    • (?<second_digit>\d+) - 组“second_digit”:一位或多位数字
    • (?:\s*(?:more|another))? - 可选出现零个或多个空格,然后是 moreanother
    • \s*seconds? - 零个或多个空格,secondseconds
  • \b(?!\w) - 右侧词边界(在其他一些正则表达式中,它是 \M\>[[:>:]])。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?