regex - 在 ReplaceAllStringFunc 回调中获取组值

标签 regex go

我试图用字符串中确定的数字范围用随机数替换字符串

package main

import (
    "fmt"
    "math/rand"
    "regexp"
    "strconv"
)

func replaceFunc(s string) string {
    groups := //?? How do i get the current mach groups
    return rand.Intn( groups[2] - groups[1]) + groups[1]
}

func main() {
    rand.Seed(time.Now().Unix())
    repl := "1,10 1,50 1,12 1,2 1,3"
    repl = regexp.MustCompile("(\\d+),(\\d+)").ReplaceAllStringFunc(repl, replaceFunc)
    fmt.Println(repl)
}

替换时如何获取正则表达式组?

最佳答案

您将单独获取每个匹配项作为函数的参数(replaceFunc 将在每个匹配项中调用一次,但不会在每个组中调用一次)。

您可以使用 strings.Split 来拆分数字,然后将它们转换为整数:

https://play.golang.org/p/ks0tkMQ2TY

func replaceFunc(s string) string {
    pieces:= strings.Split(s, ",")
    a,_ := strconv.Atoi(pieces[0])
    b,_ := strconv.Atoi(pieces[1])
    return strconv.Itoa(rand.Intn( b - a) + a)
}

func main() {
    rand.Seed(time.Now().Unix())
    repl := "1,10 1,50 1,12 1,2 1,3"
    repl = regexp.MustCompile("(\\d+),(\\d+)").ReplaceAllStringFunc(repl, replaceFunc)
    fmt.Println(repl)
}

关于regex - 在 ReplaceAllStringFunc 回调中获取组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40070786/

相关文章:

c# - 使用生成的 Golang DLL 返回字符串或 *C.Char

go - 如何将字符串写入二进制文件?

regex - 解析输出并获取十六进制颜色

Javascript - 正则表达式和懒惰

c# - 特殊字符的正则表达式?

go - ./main.go :23:15: invalid type assertion: bar.(Foo)(左边是非界面类型Bar)

go - 获取 Go 项目的所有依赖项

javascript - 使用php从字符串中删除带有类名的div

regex - 期间前删除所有内容

xml - 使用 goxmldsig 时编码 XML 后 xmlns 值无效