【问题标题】:Regex for certain string and digit for time某些字符串的正则表达式和时间的数字
【发布时间】:2022-12-08 03:43:52
【问题描述】:

任何人都可以帮助我吗? 我的字符串格式为:10 mins - 20 mins OR 1 min - 10 mins OR 10 mins - 1 hour OR 10 mins - 1 hour 30 mins OR 10 mins - 2 hours OR 10 mins - 2 hours 30 mins。 我想为所有格式创建一个正则表达式,但我不能 :disappointed: 。请帮助我,非常感谢。

以上所有格式的正则表达式。

【问题讨论】:

  • 正则表达式只是一个工具。什么问题你想用这个工具解决吗?
  • 是的,我想在创建或更新记录时找到正则表达式来验证表中的列。
  • 在什么意义上验证?它包含只要你发布的字符串?只需将它们放在一个数组中并检查是否存在——它更健壮,可能比正则表达式更快,而且仍然非常简洁(由于变体数量少)。或者你允许任何有效范围(所以它可以是1 min - 2 mins等)?在这种情况下,正则表达式不是完成这项工作的工具。你能澄清一下这个问题吗?

标签: ruby-on-rails ruby


【解决方案1】:

我可能会先在破折号上拆分,然后使用相同的正则表达式匹配每一侧的组件。

例如。

"1 hour 10 mins - 3 hours".split(/s+-s+/, 2).map do |s| 
  s.scan(
    /
        d+ s+ mins
      | d+ s+ hour(?=s?)
      | d+ s+ hour(?=s?) 
        s+ 
        d+ s+ min(?=s?)
    /x
  ) 
end
# => [["1 hour", "10 mins"], ["3 hour"]]

"1 hour 10 mins - 40 mins".split(/s+-s+/, 2).map do |s| 
  s.scan(
    /
        d+ s+ mins
      | d+ s+ hour(?=s?)
      | d+ s+ hour(?=s?) 
        s+ 
        d+ s+ min(?=s?)
    /x
  ) 
end
# [["1 hour", "10 mins"], ["40 mins"]]

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多