如何在 ruby 我的或 ruby 中查找输入日期模式是破折号或斜杠或 space
How to find input date pattern is dash or slash or space in rubymine or ruby
当输入日期为 mm-dd-yyyy
或 mm/dd/yyyy
或 mm dd yyyy
时,根据我需要格式化我自己的模式。如何找到输入日期是哪种模式?在 ruby/rubymine/watir。下面是 rubymine 黄瓜代码
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)/
由于您将尝试将匹配的字符串转换为 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
当输入日期为 mm-dd-yyyy
或 mm/dd/yyyy
或 mm dd yyyy
时,根据我需要格式化我自己的模式。如何找到输入日期是哪种模式?在 ruby/rubymine/watir。下面是 rubymine 黄瓜代码
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)/
由于您将尝试将匹配的字符串转换为 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