有沒有一種簡單的方法可以洗掉 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我的安裝不支持的。
uj5u.com熱心網友回復:
如果要動態構建字串,則應使用緩沖區
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
(構建字串列效率極低。)
uj5u.com熱心網友回復:
最接近 python 的可能是Str.global_replace:
Str.(global_replace (regexp ">") "" s)
或者一次執行多個字符,您可以執行以下操作:
Str.(global_replace (regexp "[ >\\[\\]\\n]") "" s)
注意[和]需要轉義,\因為它們分隔字符類構造,并且\還需要再次轉義,否則編譯器會解釋為轉義碼,因為我們傳遞給的regexp是普通字串文字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365676.html
上一篇:根據子串的長度過濾一維字符向量
