Clojure 按公共子字符串对字符串列表进行分组

Clojure 按公共子字符串对字符串列表进行分组,clojure,clojurescript,Clojure,Clojurescript,我有一个字符串列表,例如: 2019年_FOO_BAR.1_12 2019年_FOO_BAR.1_13 2018年10月1日12日 2019_FOO_XYZ.1_14 2017年1月14日 2017_FOO_XYZ.1_12 2019_FOO_XYZ.1_13 我想在第一个下划线之后和点之前按公共子字符串对它们进行分组 在本例中,我有两个唯一的子字符串FOO_BAR和FOO_XYZ。但较长的列表可能有N个唯一的子字符串 我希望结果如下所示: [2019年富国酒吧1日12日2019年富国酒吧1日1

我有一个字符串列表,例如:

2019年_FOO_BAR.1_12 2019年_FOO_BAR.1_13 2018年10月1日12日 2019_FOO_XYZ.1_14 2017年1月14日 2017_FOO_XYZ.1_12 2019_FOO_XYZ.1_13 我想在第一个下划线之后和点之前按公共子字符串对它们进行分组

在本例中,我有两个唯一的子字符串FOO_BAR和FOO_XYZ。但较长的列表可能有N个唯一的子字符串

我希望结果如下所示:

[2019年富国酒吧1日12日2019年富国酒吧1日13日2018年富国酒吧1日12日2017年富国酒吧1日14日] [2017_FOO_XYZ.1_12 2019_FOO_XYZ.1_13 2019_FOO_XYZ.1_14]
因此,每个子字符串都分组在一个单独的列表中

我想您正在寻找一个分组依据

def测试数据'2019_FOO_BAR.1_12 2019年_FOO_BAR.1_13 2018年10月1日12日 2019_FOO_XYZ.1_14 2017年1月14日 2017_FOO_XYZ.1_12 2019_FOO_XYZ.1_13 定义字符串到键[^string输入字符串] 让[输入字符串的第一个spliter.indexOf\u 第二个拆分器。输入字符串的索引。] .子序列输入字符串+1第一个拆分器第二个拆分器 因此,您可以通过以下方式获得您想要的:

VAL按字符串分组到关键测试数据
我想你是在找一个

def测试数据'2019_FOO_BAR.1_12 2019年_FOO_BAR.1_13 2018年10月1日12日 2019_FOO_XYZ.1_14 2017年1月14日 2017_FOO_XYZ.1_12 2019_FOO_XYZ.1_13 定义字符串到键[^string输入字符串] 让[输入字符串的第一个spliter.indexOf\u 第二个拆分器。输入字符串的索引。] .子序列输入字符串+1第一个拆分器第二个拆分器 因此,您可以通过以下方式获得您想要的:

VAL按字符串分组到关键测试数据
正则表达式的良好候选对象:

user> (vals (group-by (partial re-find #"_.*?\.") data))

;; => (["2019_FOO_BAR.1_12"
;;      "2019_FOO_BAR.1_13"
;;      "2018_FOO_BAR.1_12"
;;      "2017_FOO_BAR.1_14"]
;;     ["2019_FOO_XYZ.1_14" "2017_FOO_XYZ.1_12" "2019_FOO_XYZ.1_13"])

正则表达式的良好候选对象:

user> (vals (group-by (partial re-find #"_.*?\.") data))

;; => (["2019_FOO_BAR.1_12"
;;      "2019_FOO_BAR.1_13"
;;      "2018_FOO_BAR.1_12"
;;      "2017_FOO_BAR.1_14"]
;;     ["2019_FOO_XYZ.1_14" "2017_FOO_XYZ.1_12" "2019_FOO_XYZ.1_13"])

到目前为止你试过什么?到目前为止你试过什么?谢谢。我正在考虑使用group by,但不确定是否要拆分函数实现。谢谢。我正在考虑使用group by,但不确定是否要拆分函数实现。谢谢。简洁漂亮!正则表达式:现在您有两个问题:谢谢。简洁漂亮!正则表达式:现在有两个问题: