Clojure - 如何计算字符串中的特定单词

时间:2015-03-13 19:13:56

标签: clojure count words

(def string "this is an example string. forever and always and and")
有人能帮帮我吗?我在Clojure中编码,我一直试图计算“'和'”这个词的次数。出现在字符串中。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:5)

一种方法是使用正则表达式和re-seq function。这是一个天真的"例如:

(count (re-seq #"and" string))

以下是使用treading macro ->>编写的相同代码:

(->> string
     (re-seq #"and")
     count)

它会计算"and"中子字符串string的所有外观。这意味着像p 这样的单词也会计算在内。但是我们只能通过在正则表达式中添加一些限制(使用"word boundary" metacharacter \b)来计算and个单词:

(->> string
     (re-seq #"\band\b")
     count)

此版本将确保"and"子字符串被非字母字符包围。

如果您想要不区分大小写的搜索(包含"And"):

(->> string
     (re-seq #"(?i)\band\b")
     count)

替代解决方案是使用split function from clojure.string namespace

(require '[clojure.string :as s])

(->> (s/split string #"\W+") ; split string on non-letter characters
     (map s/lower-case) ; for case-insensitive search
     (filter (partial = "and"))
     count)