OCaml是否像Python一样有String.split函数?

时间:2014-04-21 19:57:34

标签: split ocaml string-parsing

我用它来分割字符串:

 let split = Str.split (Str.regexp_string " ") in
   let tokens = split instr in
 ....

但问题是,例如这里是我要解析的句子:

pop     esi

并在拆分后转为(我使用帮助函数打印tokens列表中的每个项目):

item: popitem: item: item: item: esi

请参阅令牌列表中有三个空格

我想知道Python中是否有string.split类似可以用这种方式解析instr

item: popitem: esi

有可能吗?

4 个答案:

答案 0 :(得分:14)

不要使用Str.regexp_string,它仅用于匹配固定字符串。

使用Str.split (Str.regexp " +")

答案 1 :(得分:7)

使用Jane Street's Core library,您可以执行以下操作:

let python_split x =
  String.split_on_chars ~on:[ ' ' ; '\t' ; '\n' ; '\r' ] x
  |> List.filter ~f:(fun x -> x <> "")
;;

答案 2 :(得分:1)

这就是我将线条分成单词的方式:

open Core.Std
let tokenize line = String.split line ~on: ' ' |> List.dedup

注意空格字符周围的单引号。

以下是String.split的文档:link

答案 3 :(得分:1)

自OCaml 4.04.0起,还有String.split_on_char,您可以将其与List.filter结合使用以删除空字符串:

# "pop     esi"
  |> String.split_on_char ' '
  |> List.filter (fun s -> s <> "");;
- : string list = ["pop"; "esi"]

不需要外部库。