gpt4 book ai didi

string - OCaml 正则表达式和避免 "try ... with"

转载 作者:行者123 更新时间:2023-12-02 05:49:27 25 4
gpt4 key购买 nike

我对 OCaml 完全陌生。我需要搜索行字符串中的数字。我正在使用 Str.search_forward 来执行此操作。请参阅下面的代码片段。我编写的代码有效,但另一位 OCaml 程序员说使用 try ... with 是不好的 OCaml 实践。我可以使用 Str.string_match,但随后我必须使用该字符的位置迭代字符串中的每个字符来测试匹配。这看起来比我正在做的事情效率低得多。

请告诉我如何在 OCaml 中使用正则表达式来匹配字符串中的数字,而无需使用 try ... with。谢谢!

let find_page_hdr linestr =
let r1 = Str.regexp "[0-9]+" in
let pos =
try
Str.search_forward r1 linestr 0
with Not_found -> -1
in
if pos >= 0
then int_of_string (Str.matched_string linestr)
else -1;;

最佳答案

我不认为 try ... with 是不好的 OCaml 编程实践。如果您将 try ... with 向外移动一点,您的代码可能会更整洁一些。像这样的东西可能会很好:

let find_page_hdr linestr =
try
ignore (Str.search_forward (Str.regexp "[0-9]+") linestr 0);
Some (int_of_string (Str.matched_string linestr))
with Not_found -> None

您可以使用“本地打开”来消除一些困惑:

let find_page_hdr linestr =
let open Str in
try
ignore (search_forward (regexp "[0-9]+") linestr 0);
Some (int_of_string (matched_string linestr))
with Not_found -> None

关于string - OCaml 正则表达式和避免 "try ... with",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28999730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com