在保留分隔符Haskell的同时拆分字符串

时间:2015-07-21 18:34:55

标签: arrays haskell

基本上我正在尝试将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"]

或者也许最好在这里使用正则表达式?

1 个答案:

答案 0 :(得分:5)

您可以拆分列表,使用keepDelimsL包中的keepDelimsRData.List.Split函数保留分隔符,例如here

split (keepDelimsL $ oneOf "xyz") "aazbxyzcxd" == ["aa","zb","x","y","zc","xd"]