簡體   English   中英

Ruby:在字符串數組中查找日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM