当前位置: 首页 > 面试题库 >

正则表达式与Golang中的replace

姬弘文
2023-03-14
问题内容

我用过regexp包来代替下面的文字

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

但是我不能替换“ products”而不替换“ products_list”之类的单词,并且Golang没有像
re.ReplaceAllStringSubmatch
这样的功能可以替换为submatch(只有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演示和regex演示。

关于模式的注释:

  • (^|[^_])-匹配字符串开头(^)或非_
  • \bproducts\b -整个词“产品”
  • ([^_]|$)-非_字符串或字符串结尾。

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



 类似资料:
  • 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个 规则字符串,这个 规则字符串 用来表达对字符串的一种过滤逻辑。 相关规则标准详见 百度百科 Go语言官方文档 regexp 包 Go 语言中正则表达式使用步骤 1.创建一个正则表达式匹配规则对象 2.利用正则表达式匹配规则对象匹配指定字符串 package main import ( "s

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 我有一根线,比如: 如何匹配每行的最后一个?顺便说一句,这是我试图在Sublime的文本中做到的。这些值不一致,就像我在这里看到的,我有几百行要替换。 我尝试了,但这与相匹配。

  • 使用 PCRE(preg_*)家族函数 PHP有两种使用不同的方式来使用正则表达式:PCRE(Perl兼容表示法,preg*)函数 和 POSIX(POSIX 扩展表示法,ereg*) 函数。 每个函数家族各自使用一种风格稍微不同的正则表达式。幸运的是,POSIX 家族函数从 PHP 5.3.0 开始就被弃用了。因此,你绝不应该使用 POSIX 家族函数编写新的代码。 始终使用 PRCE 家族函数

  • 有没有一种方法可以在python中编写与以下格式的字符串匹配的正则表达式: 或 在这里,$=表示零或更多的空白可以存在 :来自字符串的固定子集的字符串['feat','fix','docs','断'] :最大长度为n的字符串 :最大长度为m的字符串 前缀应该始终是一个字符串,之后是一些最大q长度的字母数字字符 注意:我们不能省略像应该使用与下面示例中所示完全相同的格式: feat(feat new