【问题标题】:Matching everything but a time range using regex使用正则表达式匹配除时间范围之外的所有内容
【发布时间】:2015-03-14 22:26:16
【问题描述】:

我有一个匹配时间范围的正则表达式:

(([0-2]?[0-9]:[0-5][0-9]\s*)-(\s*[0-2]?[0-9]:[0-5][0-9]))

但是,我需要一个正则表达式,它可以提取字符串中除时间范围之外的所有内容,例如:"June 12, 2015 13:30 - 14:00"(即"June 12, 2015"),但我似乎做不到。

我尝试同时使用前瞻和后瞻,如下所示,但它们似乎不起作用(至少对我而言;)。

(?<!(([0-2]?[0-9]:[0-5][0-9]\s*)-(\s*[0-2]?[0-9]:[0-5][0-9])))

【问题讨论】:

  • 为什么不使用正则表达式来将匹配的字符串替换为空字符串?应用程序是什么?我只是问,因为包含 NOT 的正则表达式通常比简单的字符串替换成本更高。
  • @OozeMeister:情况并非总是如此,而且大多数情况下是因为这种模式写得不好(使用像(?:(?!thestringiwanttoavoid).)+这样的愚蠢行为)
  • 应用程序将用户在命令行上提供的日期和时间转换为不同的时区。只要只提供一个日期和/或时间,我的应用程序就可以正常工作。我的问题是时间范围(如在 OP 中)。虽然我可以使用上面的正则表达式处理时间范围,但我想单独处理日期(如果提供)。

标签: regex


【解决方案1】:

感谢@OozeMeister 的提示。我正在用 Ruby 编写代码,代码替换是解决方案。

t = "June 12, 2015 13:30 - 14:00"
reg = /(([0-2]?[0-9]:[0-5][0-9]\s*)-(\s*[0-2]?[0-9]:[0-5][0-9]))/
date = t.gsub(reg, '')
puts date

输出:"June 12, 2015 "

【讨论】:

  • 您可以在正则表达式的开头添加\s 以消除字符串末尾不需要的空格。此外,您可能希望接受您的回答。
  • 作为一个菜鸟,我必须等待2天才能接受答案。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2021-05-26
  • 2022-08-21
  • 2018-05-26
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多