在Haskell中分割类似shell的语法?

3 投票
2 回答
552 浏览
提问于 2025-04-17 05:28

我想知道怎么在Haskell中用类似于Shell的语法来分割一个字符串。在Python中,有一个类似的功能叫做 shlex.split

>>> shlex.split('''/nosuchconf "/this doesn't exist either" "yep"''')
['/nosuchconf', "/this doesn't exist either", 'yep']

2 个回答

0

这是一个链接,指向一个名为“shellwords”的Haskell包。Haskell是一种编程语言,而这个包提供了一些工具,帮助程序员处理与命令行相关的文本,比如分割字符串等。你可以通过这个链接了解更多关于这个包的信息。

λ> import ShellWords
λ> parse "/nosuchconf \"/this doesn't exist either\" \"yep\""
Right ["/nosuchconf","/this doesn't exist either","yep"]
1

我不太确定你具体想表达什么:你是想从一个字符串中提取所有被引号包围的子字符串吗?需要注意的是,与Python等语言不同,Haskell只有一种引号来表示字符串,那就是"..."

可以考虑以下几种方法:

  • wordslines这两个函数

  • split这个包

  • 使用polyparse、uu-parsinglib、parsec等写一个自定义解析器

如果你能说明一下你为什么需要这样的功能,那可能会更有帮助:你是在尝试解析现有的shell脚本吗?如果是的话,language-sh可能会对你有帮助。不过,你在Haskell内部不应该使用这样的字符串,而是应该使用[String]或者其他的方式。

撰写回答