在Clojure函数中耦合多个正则表达式的最佳方法是什么?我相信这个函数会这样开始:
(defn foo [x]
(re-seq #"some means to combine multiple regex")
Run Code Online (Sandbox Code Playgroud)
但我不清楚这是否有效,或这种功能的效率.为了提供可能的正则表达式耦合的示例,可以考虑搜索域名和IP的函数.对于域名,我会使用正则表达式:
(re-seq #"\b([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\b" x)
Run Code Online (Sandbox Code Playgroud)
对于IP:
(re-seq #"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b")
Run Code Online (Sandbox Code Playgroud) 我希望捕获的日期格式属于"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"])
Run Code Online (Sandbox Code Playgroud)
因此,上述模式的可能排列将是"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)))
Run Code Online (Sandbox Code Playgroud)
计划在几天和几年内添加正则表达式
|[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d
Run Code Online (Sandbox Code Playgroud)
置换正则表达式不是问题.相反,它是将数月的单词制定成正则表达式结构的过程,其中日期和年份以数字表示.
我为随机游走编写了以下代码,它从{-1,1}中提取随机值.
(defn notahappyfoo [n]
(reverse (butlast (butlast (reverse (interleave (take n (iterate rand (- 0 1)))(take n (iterate rand 1))))))))
Run Code Online (Sandbox Code Playgroud)
但是,代码无法产生令人满意的行走.主要问题源于函数rand.它的下限是0,这迫使我写的尴尬代码.也就是说,函数交错最终导致步行中的狂变,因为值被迫从正变为负.使用此代码很难获得任何连续路径的感觉.
我相信在Clojure中应该有一个优雅的形式来构建这个步行.但我无法将正确的功能拼凑在一起以产生这样的行走.我想要构建的函数的目标包括随机数的下限和上限.在上面的代码中,我强制将区间-1设置为1.将此概括为-a和a将是很好的.此外,如何在-a和具有连续性概念的a之间形成随机实数(浮点)的集合?
我编写了几个输入字符串的函数,并使用不同的正则表达式来搜索字符串中的模式.所有函数都在同一输入[string]上工作.将所有这些功能组合成单个功能的最佳方法是什么?
我曾尝试将所有正则表达式组合成一个正则表达式,但遇到了退化问题.因此,模式适合多个正则表达式并输出不正确的结果.接下来,我尝试使用线程箭头 - >和 - >>但无法使这些工作.我相信这可能是正确的选择,但无法使功能正常运行.所以我无法检验我的假设.
作为两个要结合的功能的例子,请考虑以下内容:
(defn fooip [string]
(re-seq #"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" string))
Run Code Online (Sandbox Code Playgroud)
和
(defn foophone [string]
(re-seq #"[0-9]{3}-?[0-9]{3}-?[0-9]{4}" s))
Run Code Online (Sandbox Code Playgroud)