正規表現パッケージを使用して、以下のテキストを置き換えました
{% 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 %}
文字列の境界または_
以外の文字(まだWordの境界を使用)に一致する選択肢を持つキャプチャグループを使用できます。
var re = regexp.MustCompile(`(^|[^_])\bproducts\b([^_]|$)`)
s := re.ReplaceAllString(sample, `$1.$2`)
Go demo および regex demo です。
パターンに関する注意:
(^|[^_])
-文字列の開始(^
)または_
以外の文字に一致\bproducts\b
-Word全体の「製品」([^_]|$)
-非_
または文字列の終わり。置換パターンでは、後方参照を使用して、かっこ(キャプチャグループ)でキャプチャされた文字を復元します。