[提问]字符串替换的时候怎么根据匹配的字符串进行替换

比如我有一个字符串s "Hello ! World"
我想要 replace(s,regex("\(w+)"),some-func("\1"))

这样为每一个匹配的字符串提供不同的替换效果,这个应该怎么实现

如果语言本身提供了这种方式就直接调用,如果没有的话就按每个匹配的位置依次替换,替换完毕之后再合并成一个字符串。

1赞

能用一些流行的语言举个例子吗

python 里 re.sub
https://docs.python.org/3/library/re.html#re.sub


其它不流行的语言:
Emacs Lisp 里用 replace-regexp-in-string https://www.gnu.org/software/emacs/manual/html_node/elisp/Search-and-Replace.html

(replace-regexp-in-string
 "\\(\\w+\\)"
 (lambda (w) (if (equal w "Hello") "a" "b"))
 "Hello ! World")
;; => "A ! B"

我工作中用的语言 Elixir 里用 Regex.replace
https://hexdocs.pm/elixir/Regex.html#replace/4

那遇到多个匹配怎么办?

啥叫多个匹配,你说正则里有多个分组么

嗯,学过太久忘了怎么叫了

elisp 里 replace-regexp-in-string 函数的参数是整个匹配字符串,你可以再函数里再做匹配处理。
比如 "\\(\\w+\\) ! \\(\\w+\\)" 这个正则,函数接到的参数是 “Hello ! World” 这一整个匹配的字符串,而没有分组信息,所以你得在函数里手动处理。