[英]Ruby : Find a Date in a array of strings
我正在搜索一個字符串數組以查找Date
:
我正在使用的方法是一種好方法嗎? 或。 . . 有沒有更好的選擇。
也許是一種更“美麗”的方式來做到這一點?
query = {'Hvaða','mánaðardagur','er','í','dag?','Það','er','02.06.2011','hví','spyrðu?'}
def has_date(query)
date = nil
query.each do |q|
begin
date = Date.parse(q)
query.delete(q)
break
rescue
end
end
return date
end
請注意,在 Ruby 中,我們使用方括號[]
表示數組文字(花括號{}
用於 Hash 文字)。
這是一個解決方案,它將查找數組中的所有日期並將它們作為字符串返回(感謝@steenslag):
require 'date'
arr = ['Hvaða', 'er', '02.06.2011', 'hví', '2011-01-01', '???']
dates = arr.select { |x| Date.parse(x) rescue nil }
dates # => ["02.06.2011", "2011-01-01"]
首先,您可以嘗試驗證字符串,如果它是有效的日期格式,那么您可以將其解析為日期:
query.each do |item|
if item =~ /^\d{2}([-\\\/.])\d{2}\1\d{4}$/ then
# coding
end
end
如果您只想要第一次約會並且想要嚴格限制有效日期:
arr = ['Hvaða', 'er', '02.06.2011', 'hví', '2011-01-01', '???']
date = arr.detect do |x| ## or find
d,m,y = x.split('.')
Date.valid_civil?(y.to_i, m.to_i, d.to_i)
end
p date #=> "02.06.2011"
(Date.parse 是寬容的,它愉快地解析 02.13.2011)
如果要解析更多類型的日期,請使用Chronic ... 我認為它還有不引發錯誤的副作用,只是返回 nil。
因此,如果您想找到所有有效日期:
arr = ['Hvaða', 'er', '02.06.2011', 'hví', '2011-01-01', '???']
arr.collect {|a| Chronic.parse a}.compact
如果你想要第一個:
arr.find {|a| Chronic.parse a}
如果你只想要一個真/假“這里有約會嗎?”
arr.any? {|a| Chronic.parse a}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.