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

BWS*_*rns 4 haskell

基本上我正在尝试拆分String成一个[[String]]然后将结果连接起来但是将分隔符保留在结果列表中(甚至连续重复).

类似下面的作品,但是分隔符被碾压成一个空格而不是保留所有三个空格

unwords . map (\x -> "|" ++ x ++"|") . words $ "foo   bar"
-- "|foo| |bar|"
Run Code Online (Sandbox Code Playgroud)

理想情况下我可以得到类似的东西:

"|foo||   ||bar|" -- or
"|foo|   |bar|"
Run Code Online (Sandbox Code Playgroud)

我只是无法弄清楚如何保留分隔符,我看到的所有分割函数都从结果列表中删除了分隔符,我可以自己编写一个但是它看起来像是在标准库中并且在此处我希望学习的不仅仅是基础知识,包括熟悉更多口语化的做事方式.

我想我正在寻找一些功能:

splitWithDelim :: Char -> String -> [String]
splitWithDelim "foo   bar" -- ["foo", " ", " ", " ", "bar"]
Run Code Online (Sandbox Code Playgroud)

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

aje*_*eck 5

您可以分割的列表,保持使用分隔符keepDelimsLkeepDelimsR函数在Data.List.Split包中,如同在这里:

split (keepDelimsL $ oneOf "xyz") "aazbxyzcxd" == ["aa","zb","x","y","zc","xd"]
Run Code Online (Sandbox Code Playgroud)