gpt4 book ai didi

regex - 如何在 Elixir 中操作正则表达式替换字符串

转载 作者:行者123 更新时间:2023-12-01 09:21:17 25 4
gpt4 key购买 nike

我发现自己想在 Elixir 中这样做:

re_sentence_frag = %r/(\w([^\.]|\.(?!\s|$))*)(?=\.(\s|$))/
Regex.replace(re_sentence_frag, " oh. a DOG. woOf. ", String.capitalize("\\1"))

当然,那是没有效果的。 (它只将字符串 "\\1" 大写一次。)我真正的意思是将 String.capitalize/1 应用于 replace 找到的每个匹配项 功能。但是第三个参数不能接受函数引用,所以传递 &(String.capitalize("\\1") 也不起作用。

这看起来太基础了,我很惊讶这是不可能的。是否有另一种方法可以巧妙地表达这种操纵?看起来底层的 Erlang 库不会立即支持将函数引用作为第三个参数传递,因此在 Elixir 中修复这可能不是完全微不足道的。

您将如何编写每个匹配字符串的操作?

最佳答案

这是一种基于split的解决方案:

" oh.  a DOG. woOf. pi is 3.14159. try version 7.a." |>
String.split(%r/(^|\.)(\s+|$)/) |>
Enum.map_join(&String.capitalize/1)

我想这并不比我最初的尝试笨拙多少。正则表达式要简单得多,因为它只需要找到句子之间的位。

关于regex - 如何在 Elixir 中操作正则表达式替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290095/

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