用于正则表达式匹配及其在字符串中的位置的紧凑 Clojure 代码

2024-05-03

斯图尔特·哈洛威举了个例子

(re-seq #"\w+" "The quick brown fox")

作为在 Clojure 中查找正则表达式匹配项的自然方法。在他的书中,这种构造与匹配器上的迭代进行了对比。如果人们关心的只是一份比赛列表,那就太好了。但是,如果我想要匹配项及其在字符串中的位置怎么办?有没有更好的方法可以让我利用 java.util.regex 中的现有功能,对原始字符串中的每个索引进行序列理解之类的操作?换句话说,人们想输入类似的内容

(重新序列映射#“[0-9]+”“3a1b2c1d”)

这将返回一个映射,其中键作为位置,值作为匹配,例如

{0 "3", 2 "1", 4 "2", 6 "1"}

现有的库中是否已经有一些实现,或者我应该编写它(不应该有太多的代码行)?


你可以从a中获取你想要的数据java.util.regex.Matcher object.

user> (defn re-pos [re s]
        (loop [m (re-matcher re s)
               res {}]
          (if (.find m)
            (recur m (assoc res (.start m) (.group m)))
            res)))
#'user/re-pos
user> (re-pos #"\w+" "The quick brown fox")
{16 "fox", 10 "brown", 4 "quick", 0 "The"}
user> (re-pos #"[0-9]+" "3a1b2c1d")
{6 "1", 4 "2", 2 "1", 0 "3"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于正则表达式匹配及其在字符串中的位置的紧凑 Clojure 代码 的相关文章

随机推荐