将多个功能组合到一个功能中

sun*_*ots 0 regex clojure

我编写了几个输入字符串的函数,并使用不同的正则表达式来搜索字符串中的模式.所有函数都在同一输入[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)

A. *_*ebb 7

如果您要将多个函数组合成一个函数,该函数将返回将每个函数应用于同一输入的结果,那正是其目的juxt.

(def foo (juxt foophone fooip))

(foo "555-555-5555 222.222.222.222 888-888-8888")
;=> [("555-555-5555" "888-888-8888") ("222.222.222.222")]
Run Code Online (Sandbox Code Playgroud)