Does OCaml have String.split function like Python?
Asked Answered
A

4

13

I am using this to split strings:

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

But the problem is that for example here is a sentence I want to parse:

pop     esi

and after the split it turns to be (I use a helper function to print each item in the tokens list):

item: popitem: item: item: item: esi

See, there are three spaces in the token list.

I am wondering if there is a string.split like in Python which can parse instr this way:

item: popitem: esi

Is it possible?

Audrey answered 21/4, 2014 at 19:57 Comment(0)
I
23

Don't use Str.regexp_string, it's only for matching fixed strings.

Use Str.split (Str.regexp " +")

Ives answered 21/4, 2014 at 20:2 Comment(0)
W
9

Since OCaml 4.04.0 there is also String.split_on_char, which you can combine with List.filter to remove empty strings:

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

No external libraries required.

Wooten answered 5/5, 2019 at 14:45 Comment(0)
Y
7

Using Jane Street's Core library, you can do:

let python_split x =
  String.split_on_chars ~on:[ ' ' ; '\t' ; '\n' ; '\r' ] x
  |> List.filter ~f:(fun x -> x <> "")
;;
Yecies answered 16/11, 2014 at 18:4 Comment(0)
M
1

This is how I split my lines into words:

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

Mind the single quotes around the space character.

Here's the documentation for String.split: link

Meridional answered 23/9, 2015 at 12:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.