【问题标题】:Regular expression in DelphiDelphi中的正则表达式
【发布时间】:2014-04-22 16:33:18
【问题描述】:

我有这个正则表达式来检查 HH:MM:SS 格式的时间戳:

(20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})

但我想忽略前面带有“运行时间 =”的时间戳

00:01:02 -> YES
compile time = 00:01:02 -> YES (only 00:01:02)
run time = 00:01:02 -> NO

这可以使用正则表达式来完成吗?

【问题讨论】:

  • 我已经删除了 Delphi 标签(因为您的问题与 Delphi 无关),并将其替换为 PCRE 标签(您正在使用的正则表达式解析器的类型)。问题只是关于正则表达式,而不是关于 Delphi。
  • 您的时间戳总是采用 HH:MM:SS 的形式吗?因为该正则表达式可选地仅匹配每个部分的 1 个数字,并允许最后一部分(:SS)完全丢失。此正则表达式将严格遵循该模式:(?:2[0-3]|[10]\d):[0-5]\d:[0-5]\d

标签: regex pcre


【解决方案1】:

negative Lookahead 会这样做:

^(?!run time = ).*?(20|21|22|23|[01]\\d|\\d)(([:][0-5]\\d){1,2})

http://www.regular-expressions.info/lookaround.html

【讨论】:

    【解决方案2】:

    将 Tuga 建议的负前瞻与 CAustin 建议的正确解析 HH:MM:SS 相结合,并添加一个捕获组,以便您可以仅提取 HH:MM:SS 部分:

    (?!run time = ).*?((?:2[0-4]|[10]\d):[0-5]\d:[0-5]\d)
    

    【讨论】:

      【解决方案3】:

      我想忽略前面带有“运行时间 =”的时间戳

      为了真正满足这个要求,我们需要一个消极的后视,这正是 PCRE 提供的。

      (?<!run time = )(([01]\d|2[0-3])(:[0-5]\d){2})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        相关资源
        最近更新 更多