【问题标题】:Regex for dates in ClojureClojure中日期的正则表达式
【发布时间】:2014-01-31 07:06:23
【问题描述】:

我希望捕获的日期格式属于“word/DD/YYYY”模式的排列,其中单词对应于月份,即

(def months ["january" "January" "february" "February" "march" "March" "April" "april" "may" "May" "june" "June" "july" "July" "august" "August" "september" "September" "october" "October" "november" "November" "december" "December"])

因此,上述模式的可能排列将是“DD/word/YYYY”、“YYYY/word/DD”和“YYYY/DD/word”

我尝试了一些类似

的方法
(def months-match (clojure.string/join "|" months))
(def months-str (str "(\\s*(" months-match ")")) 
(def moster (re-pattern  months-str))

(defn foomonths [s]
(map first (re-seq moster s)))

计划添加几天和几年的正则表达式

|[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d

置换正则表达式不是问题。相反,它是将作为单词的月份形成正则表达式结构的过程,其中日期和年份为数字。

【问题讨论】:

    标签: regex clojure clojure-contrib


    【解决方案1】:

    我看到你的问题是关于正则表达式的,所以如果这个答案离题了,我很抱歉,但如果我可能会建议一种稍微不同的方法,clj-time 包含一个时间格式化程序,可以开箱即用地处理大多数这些情况:

    project.clj:

     (defproject hello "0.1.0-SNAPSHOT"
      :description "FIXME: write description"
      :url "http://example.com/FIXME"
      :license {:name "Eclipse Public License"
                :url "http://www.eclipse.org/legal/epl-v10.html"}
      :dependencies [[org.clojure/clojure "1.5.1"]
                  [clj-time "0.6.0"]]
      :source-paths ["dev"]) 
    
    user> (def custom-formatter (formatter "dd/MMMMMMMMM/YYYY"))
    #'user/custom-formatter
    
    user> (parse custom-formatter "14/June/2014")
    #<DateTime 2014-06-14T00:00:00.000Z>
    
    user> (parse custom-formatter "14/september/2014")
    #<DateTime 2014-09-14T00:00:00.000Z> 
    

    因此,您可以为每个排列编写一个时间格式字符串,然后尝试每个排列,直到找到匹配项

    【讨论】:

    • 是否可以将输出转换为向量?我尝试使用 'into' 功能,但无济于事。
    • 另外,如何按原样提取日期?不是 DateTime 格式,而是 14/June/2014 中的示例?
    • 1) 如果您将调用的结果传递给 parse 到 bean 函数,您可以将其作为映射,然后您可以(如果需要)通过调用 vals 然后 vec 将其转换为向量. (如果你想要所有的信息)
    • 2) 一种选择是将其解析为数据对象,然后以所需的输出格式对其调用unparse。否则,这是一个非常不同的答案。 (更像你原来的问题)
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2020-08-11
    • 1970-01-01
    • 2012-03-08
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多