Golang 中带有替换的正则表达式

2024-02-27

我使用 regexp 包来替换下面的文本

{% macro products_list(products) %}
{% for product in products %}
productsList
{% endfor %}
{% endmacro %}

我无法在不替换“products_list”等其他单词的情况下替换“products”,并且 Golang 没有类似的功能re.ReplaceAllStringSubmatch替换为子匹配(只有 FindAllStringSubmatch)。我用过re.ReplaceAllString将“产品”替换为 .

{% macro ._list(.) %}
{% for product in . %}
.List
{% endfor %}
{% endmacro %}

但我需要这个结果:

{% macro products_list (.) %}
{% for product in . %}
productsList
{% endfor %}
{% endmacro %}

您可以使用捕获组,其交替匹配字符串边界或不匹配的字符_(仍然使用单词边界):

var re = regexp.MustCompile(`(^|[^_])\bproducts\b([^_]|$)`)
s := re.ReplaceAllString(sample, `$1.$2`)

这里是Go demo https://play.golang.org/p/4_KSyonY9y and a 正则表达式演示 https://regex101.com/r/pL0uR0/1.

图案注意事项:

  • (^|[^_])- 匹配字符串开始(^) 或除_
  • \bproducts\b- 一个完整的词“产品”
  • ([^_]|$)- 要么是非_或字符串的末尾。

在替换模式中,我们使用反向引用来恢复用括号捕获的字符(捕获组)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang 中带有替换的正则表达式 的相关文章

随机推荐