基本上我正在尝试将String
拆分为[[String]]
然后将结果连接起来,但将结果保留在结果列表中(甚至连续重复)。
类似于以下类型的作品,但是分隔符被碾压成一个空格而不是保留所有三个空格
unwords . map (\x -> "|" ++ x ++"|") . words $ "foo bar"
-- "|foo| |bar|"
理想情况下,我可以得到类似的东西:
"|foo|| ||bar|" -- or
"|foo| |bar|"
我只是无法弄清楚如何保留分隔符,我看到的所有分割函数都从结果列表中删除了分隔符,我可以自己编写一个,但它似乎会出现在标准库中在这一点上,我希望学习的不仅仅是基础知识,包括熟悉更多口语化的做事方式。
我想我正在寻找一些功能:
splitWithDelim :: Char -> String -> [String]
splitWithDelim "foo bar" -- ["foo", " ", " ", " ", "bar"]
或者也许最好在这里使用正则表达式?
答案 0 :(得分:5)
您可以拆分列表,使用keepDelimsL
包中的keepDelimsR
和Data.List.Split
函数保留分隔符,例如here:
split (keepDelimsL $ oneOf "xyz") "aazbxyzcxd" == ["aa","zb","x","y","zc","xd"]