OCaml:如何从字符串中删除所有非字母字符?

kjo*_*kjo 2 regex unicode ocaml

如何从字符串中删除所有非字母字符?

例如

"Wë_1ird?!"  ->  "Wëird"
Run Code Online (Sandbox Code Playgroud)

在Perl中,我会这样做=~ s/[\W\d_]+//g.在Python中,我会使用

re.sub(ur'[\W\d_]+', u'', u"Wë_1ird?!", flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

等等.

AFAICT,Str.regex不支持\W,\d等等(我不知道它是否支持Unicode,但不知何故,我对此表示怀疑).

Dan*_*zli 6

Str不支持Unicode.假设您正在处理UTF-8编码数据.您可以按如下方式使用UutfUucp:

let keep_alpha s =
  let b = Buffer.create 255 in
  let add_alpha () _ = function
  | `Malformed _ -> Uutf.Buffer.add_utf_8 b Uutf.u_rep
  | `Uchar u -> if Uucp.Alpha.is_alphabetic u then Uutf.Buffer.add_utf_8 b u
  in
  Uutf.String.fold_utf_8 add_alpha () s;
  Buffer.contents b

# keep_alpha "Wë_1ird?!";;
- : string = "Wëird"
Run Code Online (Sandbox Code Playgroud)