gpt4 book ai didi

regex - Clojure 中的多个正则表达式

转载 作者:行者123 更新时间:2023-12-05 08:58:39 24 4
gpt4 key购买 nike

在 Clojure 函数中耦合多个正则表达式的最佳方式是什么?我相信这个函数会这样开始:

(defn foo [x]
(re-seq #"some means to combine multiple regex")

但我不清楚这是否可行,或者这种功能的效率。为了提供可能的正则表达式耦合的示例,可以考虑搜索域名和 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)

对于 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")

最佳答案

正则表达式已经允许使用 | 运算符进行交替。

user=> (re-seq #"\d+" "123 foo 345 bar")
("123" "345")
user=> (re-seq #"[a-zA-Z]+" "123 foo 345 bar")
("foo" "bar")
user=> (re-seq #"\d+|[a-zA-Z]+" "123 foo 345 bar")
("123" "foo" "345" "bar")

如果需要,您可以通过插入 | 运算符以编程方式联合正则表达式模式。

(defn union-re-patterns [& patterns] 
(re-pattern (apply str (interpose "|" (map #(str "(?:" % ")") patterns)))))

user=> (union-re-patterns #"\d+" #"[a-zA-Z]+")
#"(\d+)|([a-zA-Z]+)"
user=> (map first (re-seq (union-re-patterns #"\d+" #"[a-zA-Z]+") "123 foo 345 bar"))
("123" "foo" "345" "bar")

关于regex - Clojure 中的多个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com