parsing - 从复杂字符串返回列表
问题描述
我从haskell开始。
我想知道我是否可以像这样将字符串转换为不同元素类型的列表:"1*30%4" -> ['1', '*', '30', '%', '4']
没有 Parsec
我已经找到了答案,但没有一个能真正帮助我……比如map (:[]) "1*30%4"
GHCI 或intersperse
.
但我不知道如何保持正确的格式,例如,我的列表中不能有数字或浮点数/双精度数,因为所有内容都被一一切割:"1*30%4" -> ['1', '*', '3', '0', '%', '4']
或"1*30.4%4" -> ['1', '*', '3', '0', '.', '4', '%', '4']
有人可以帮助我吗?
解决方案
正如一些用户指出的那样,您的返回类型是[String]
而不是[Char]
. 您可以通过以下方式轻松实现此目的:
import Data.Char
import Data.List
expresionToList :: String -> [String]
expresionToList = groupBy readAsNumber
where readAsNumber c d = pred c && pred d
pred x = isDigit x || x == '.'
pred
当函数的输入是数字或点时,函数返回 True,否则返回 FalsereadAsNumber
取两个返回 True 如果两者都是数字或点- 最后你把你的字符串分组
readAsNumber
推荐阅读
- java - 使用Java在azure中上传文件后如何获取blob-URL
- rascal - 将物理位置解析为逻辑位置
- c - (x | y) - y 为什么不能简单地是 x 甚至 `x | 0`
- node.js - 如何在启动时使用 Knex 记录“连接到 X 数据库”?
- php - 正则表达式删除带或不带分隔符的变量前缀
- angularjs - 如何在量角器中多次按 BACKSPACE 或 ENTER
- javascript - Gatling 中的 CSRF 相关性
- r - 如何在一个聚合函数上使用 data.table dcast 重命名
- java - Vaadin 视图中的自动装配服务和组件不起作用
- java - 在 Oracle Weblogic12c 中分派传入的 RPC 调用时出现异常