String 如何在不转义的空白处拆分字符串?

String 如何在不转义的空白处拆分字符串?,string,list,haskell,String,List,Haskell,我想在非转义空格处拆分字符串,如下所示: let s = "number\\ 1 number\\ 2 number\\ 3" ["number\\ 1", "number\\ 2", "number\\ 3"] or even better ["number 1", "number 2", "number 3"] 我该怎么做 尝试1: s=“数字\\1数字\\2数字\\3” splitWhitespace::String->[String] splitWhitespcae s=spl

我想在非转义空格处拆分字符串,如下所示:

let s = "number\\ 1 number\\ 2 number\\ 3"


["number\\ 1", "number\\ 2", "number\\ 3"]

or even better

["number 1", "number 2", "number 3"]
我该怎么做

尝试1:

s=“数字\\1数字\\2数字\\3”
splitWhitespace::String->[String]
splitWhitespcae s=splitOn“s
--返回[“number\\”、“1”、“number\\”、“2”、“number\\”、“3”]
反斜杠::[String]->[String]
反斜杠[]=[]
concatbackslax(x:xx:xs)=案例初始x
“\\”->(x++xx):反斜杠
_->x:xx:concatbackslax x
但出于某种原因,这会返回相同的列表

尝试2:

splitOnWhitespace::String->[String]
splitonwhitespaces=splitOn“”s
反斜杠::[String]->[String]
反斜杠[]=[]
反斜杠[x,xs]=最后一个x的大小写
“\\”->[(初始x)++xs]
_->[x,xs]
反斜杠(x:xx:xs)=最后一个x的大小写
“\\”->反斜杠((初始x)+xx:xs)
_->x:concatbackslax(xx:xs)
这是在@leftaroundabout的帮助下完成的,但是我最终没有使用空格

> let s = "number\\ 1 number\\ 2 number\\ 3"
> concatBackslash $ splitOnWhitespace s
["number1","number2","number3"]
两个问题:

  • init
    提供字符串中除最后一个字符以外的所有内容。但是,当您尝试与
    “\\\”
    匹配时,这实际上是最后一个字符。因此,您应该在case语句中实际使用
    last
  • 您确实需要
    init
    的地方是
    ++
    将该元素与下一个元素一起初始化的时候。在这种情况下,您不希望保留尾随的
    \
    ,而是在它之前保留所有
两个问题:

  • init
    提供字符串中除最后一个字符以外的所有内容。但是,当您尝试与
    “\\\”
    匹配时,这实际上是最后一个字符。因此,您应该在case语句中实际使用
    last
  • 您确实需要
    init
    的地方是
    ++
    将该元素与下一个元素一起初始化的时候。在这种情况下,您不希望保留尾随的
    \
    ,而是在它之前保留所有

这是无效的Haskell代码。我想你的意思是
s=“number\\1 num..”
,或者说
s
的原始内容是
number\1
等?是的,很抱歉。好的。但是你也应该自己努力解决这个问题。看,我发布了我的尝试,我们有优秀的解析器组合器库,在其中这将是完全无痛的。查看这些库中的一个,了解解析器代码的外观。这不是有效的Haskell代码。我想你的意思是
s=“number\\1 num..”
,或者说
s
的原始内容是
number\1
等?是的,很抱歉。好的。但是你也应该自己努力解决这个问题。看,我发布了我的尝试,我们有优秀的解析器组合器库,在其中这将是完全无痛的。看看这些库中的解析器代码是什么样子的。我修改了你的技巧,让它发挥了一半的作用,但是我最终没有了我的空白。。。你能看一下我的第二次尝试吗?嗯,你一开始就无条件地分割了空白。您需要更改拆分函数,或者将空格放回处理
\
符号的位置。我调整了您的提示,使其发挥了一半的作用,但最终没有了空格。。。你能看一下我的第二次尝试吗?嗯,你一开始就无条件地分割了空白。您需要更改拆分函数,或者将空格放回处理
\
符号的位置。