Haskell 跳过不包含新行的空格
提供函数 此函数使用所有可用的空白 如何实现跳过除Haskell 跳过不包含新行的空格,haskell,attoparsec,Haskell,Attoparsec,提供函数 此函数使用所有可用的空白 如何实现跳过除\n和\r\n之外的任何空白的函数skipSpaceNoNewline 注意:此问题故意不显示任何研究成果,因为它是问答式回答。您可以组合和(与\n和\r\n匹配) 使用lambda函数,可以将它们组合成一个跳过除换行符以外的任何空白的skipWhile谓词 skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x)) 为什么不直接使用
\n
和\r\n
之外的任何空白的函数skipSpaceNoNewline
注意:此问题故意不显示任何研究成果,因为它是问答式回答。您可以组合和(与\n
和\r\n
匹配)
使用lambda函数,可以将它们组合成一个跳过除换行符以外的任何空白的skipWhile
谓词
skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))
为什么不直接使用
skippacentowline=filter(而不是.isSpace)
编辑:我错了。空间是无用的。我以为isSpace'\n'
是False
,但它是True
。直接查看空间即可:
[ghci] putStrLn $ filter (/=' ') $ ";df g; lkdfg\n l sd;lfk sdf"
;dfg;lkdfg
lsd;lfksdf
或者确保过滤正确的内容:
[ghci] putStrLn $ filter (\m-> m `notElem` "\t\f\v") $ ";df g; lk\vdfg\n l sd;lfk sdf"
;df g; lkdfg
l sd;lfk sdf
因此,您的函数变成:
skipSpaceNtoNewLine = filter (\m-> m `notElem` "\t\f\v")
很抱歉搞混了。我想你误解了这个问题。这并不是关于跳过字符串中的空格,而是在attoparsec中。您提供了签名
String->String
的解决方案,但需要的是解析器()
,除此之外,我认为您的算法很慢(列表中的元素,您通常应该使用集合或手写检查),但最重要的是,它可能是不正确的,因为据我所知,空格字符类包含的内容超过了“\t\f\v”
,尤其是unicode。