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