如何删除 OCaml 中字符串的所有字符

How to delete all char of a string in OCaml

有没有一种简单的方法可以删除 OCaml 字符串中出现的所有字符?

我想我可以使用这个干净的功能:

let clean = 
  function 
  | ' ' | '[' | ']' | '\n' | '>' -> '' 
  | x -> x 
in 

但是你不能在 OCaml 中使用 ''

所以我想出了这个解决方案:

let delete = 
  function 
    | ' ' | '[' | ']' | '\n' | '>' -> true 
    | _ -> false 
  in 
  let char_list, size =
    String.fold_left 
      (fun (acc, count) c -> 
        if delete c then acc, count 
        else c::acc, count+1) ([],0) path_string 
  in
  let char_list = ref @@ List.rev char_list in 
  let aux() = 
    match !char_list with 
    | [] -> failwith "unexpected"
    | x :: xs -> char_list := xs; x
  in
  let cleaned_string = String.init size (fun _ -> aux()) in 
  cleaned_string

但它很大 - python 只是 s.replace('>','') 抑制一个 - 并且只适用于 OCaml 4.13,我的安装不支持它。

如果要动态构建字符串,应该使用缓冲区

let remove_chars erase s =
  let b = Buffer.create 10 in
  String.iter (fun c -> if not (erase c) then Buffer.add_char b c);
  Buffer.contents b

(构建字符列表效率极低。)

最接近 python 的可能是 Str.global_replace:

Str.(global_replace (regexp ">") "" s)

或者一次做多个角色,你可以这样做:

Str.(global_replace (regexp "[youChar1yourChar2yourChar3]") "" s)

所以在你的情况下:

Str.(global_replace (regexp "[][> \n]") "" s)