Attoparsec提供了函数skipSpace
。
此函数消耗所有可用的空白。
如何实现一个跳过除and之外的skipSpaceNoNewline
任何空格的函数?\n
\r\n
注意:这个问题故意显示没有研究工作,因为它是问答式回答的。
Attoparsec提供了函数skipSpace
。
此函数消耗所有可用的空白。
如何实现一个跳过除and之外的skipSpaceNoNewline
任何空格的函数?\n
\r\n
注意:这个问题故意显示没有研究工作,因为它是问答式回答的。
您可以组合skipWhile
and isEndOfLine
(同时匹配\n
and \r\n
)。
使用 lambda 函数,您可以将它们组合成一个skipWhile
谓词,该谓词跳过除换行符以外的任何空格。
skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))
为什么不直接使用skipSpaceNtoNewLine = filter (not.isSpace)
?
编辑:我错了。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")
很抱歉造成混乱。