如何在 ruby 我的或 ruby 中查找输入日期模式是破折号或斜杠或 space

How to find input date pattern is dash or slash or space in rubymine or ruby

当输入日期为 mm-dd-yyyymm/dd/yyyymm dd yyyy 时,根据我需要格式化我自己的模式。如何找到输入日期是哪种模式?在 ruby/rubymine/watir。下面是 ruby​​mine 黄瓜代码

Then(/^I see correct (.*) on the form$/) do |mdate|
  mdate1 = Date.strptime(mdate,"%m-%d-%Y").strftime("%a %b %d %Y 00:00:00 GMT+0000")
  puts "parsing output1 is #{mdate1}"

这里mdate可以是上面描述的任何模式,目前strptime只适用于一种模式。如果它需要为其他模式工作如何进行?

正则表达式匹配和案例语句

如果您的问题只是关于如何将您描述的数据与 Ruby 中的正则表达式相匹配,您可以使用如下模式:

input_date =~ %r"\b\d{1,2}([-/ ])\d{1,2}\d{4}\b"

但是,匹配的有效性将取决于您的数据集的质量。它可能无法匹配或匹配非日期数据的方式有很多。您必须非常了解您的数据,才能制作一个有用但极简的正则表达式,只匹配您想要的内容。

另一方面,如果您的问题是关于哪个模式匹配,那么:

input_date =~ %r"\b\d{1,2}([-/ ])\d{1,2}\d{4}\b"

# print the format based on delimiter used
case input_date.scan(%r"[-/ ]").first
when "/" then p "mm/dd/yyyy"
when "-" then p "mm-dd-yyyy"
when " " then p "mm dd yyyy"
end

您可以根据需要调整操作,例如为 Date#strptime, DateTime#strftime 定义模式、设置变量或调用一种或多种方法来制作或格式化日期对象。不过,这绝对会让您指明正确的方向。

通过将字符串与以下正则表达式匹配,分隔符将保存到捕获组 1。

/(?<!\d)\d{2}([- \/])\d{2}\d{4}(?!=\d)/

Start your engine!

由于您将尝试将匹配的字符串转换为 Date 对象,您会在那个时候发现它是否是一个有效的日期。因此,正则表达式不需要将月份的可能性限制为 01-12 或将天数限制为 01-31; \d{2} 就够了。

Ruby 的正则表达式引擎执行以下操作。

(?<!\d)   : use a negative lookbehind to assert the previous character
            is not a digit
\d{2}     : match 2 digits
([- \/])  : match a character in the character class and save to
            capture group 1
\d{2}     : match 2 digits
        : match the content of capture group 1
\d{4}     : match 4 digits
(?!=\d)   : use a negative lookahead to assert the next character
          : is not a digit