为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中使用替换的正则表达式

在 Golang 中使用替换的正则表达式

Go
饮歌长啸 2022-01-10 16:56:26
我已经使用 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 %}
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

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

这是Go 演示正则表达式演示

图案注意事项:

  • (^|[^_])- 匹配字符串 start ( ^) 或除此之外的字符_

  • \bproducts\b - 一个完整的词“产品”

  • ([^_]|$)- 非_字符串或字符串结尾。

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


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 364 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号