【问题标题】:Go regular expression with positive lookbehind [duplicate]使用正则表达式进行正则表达式[重复]
【发布时间】:2019-12-10 10:14:34
【问题描述】:

我正在尝试在 Go 中编写一个函数,它将 foobar 替换为 foobaz,但前提是 bar 前面有 foo。在我看来,regexp.ReplaceAll 函数和积极的后视(参见https://www.regular-expressions.info/lookaround.html)可以解决这个问题,所以我尝试了以下方法:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile(`(?<=foo)bar`)

    new := re.ReplaceAll([]byte("foobar"), []byte("baz"))

    fmt.Println(string(new))
}

我们的目标是让这个程序打印foobaz,但我却因为正则表达式无法编译而感到恐慌:

panic: regexp: Compile(`(?<=foo)bar`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`

我怎样才能做到这一点?

注意

我尝试过的一件事是用非捕获组替换正则表达式:

re := regexp.MustCompile(`(?:foo)bar`)

但是,我发现程序随后会根据需要打印 baz 而不是 foobaz

【问题讨论】:

  • 这里的正则表达式有什么用?要求“将foobar 替换为foobaz,但前提是bar 前面有foo”是相当奇怪的,因为foobar 只是一个静态字符串,并且总是会满足该条件。跨度>

标签: regex go


【解决方案1】:

看起来您的问题只是静态字符串替换。可以简单地用strings.Replace完成

但如果你确实想要向后看:

Go 的regexp 包不支持lookbehind,你可以在这里查看支持的功能:https://github.com/google/re2/wiki/Syntax

如果你确实需要lookbehind,你应该尝试第三方模块,例如:https://github.com/dlclark/regexp2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    相关资源
    最近更新 更多