OCaml解析大文本

时间:2015-03-17 05:44:16

标签: regex ocaml

OCaml,如何使用Page模块反汇编大型多行文本数据。忽略新行开头的符号。

let get_info content =
  let re = Str.regexp "\\(.+?\\)" in
  match Str.string_match re content 0 with
    | true -> print_endline("-->"^(Str.matched_group 1 content)^"<--")
    | false -> print_endline("not found");;

此示例仅返回第一行,但需要多行中的一些文本。

1 个答案:

答案 0 :(得分:2)

根据http://pleac.sourceforge.net/pleac_ocaml/patternmatching.html

  
      
  • Str的正则表达式缺少空格匹配模式。
  •   

所以,这是在该页面上建议的解决方法:

#load "str.cma";;
...
let whitespace_chars =
  String.concat ""
    (List.map (String.make 1)
       [
         Char.chr 9;  (* HT *)
         Char.chr 10; (* LF *)
         Char.chr 11; (* VT *)
         Char.chr 12; (* FF *)
         Char.chr 13; (* CR *)
         Char.chr 32; (* space *)
       ])

然后

let re = Str.regexp "\\((?:[^" ^ whitespace_chars ^ "]|" ^ whitespace_chars ^ ")+?\\)" in