Получение значений группы в обратном вызове ReplaceAllStringFunc

Я пытаюсь заменить строку случайными числами на числовой диапазон, определенный в строке

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)
}

Как я могу получить группы регулярных выражений при замене?

regex,go,

0

Ответов: 1


1

Вы получите каждый матч индивидуально в качестве аргумента функции ( replaceFuncбудет вызываться один раз за матч, но не один раз для каждой группы).

Вы можете использовать strings.Splitдля разделения чисел, а затем преобразовать их в ints:

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)
}
регулярное выражение, иди,
Похожие вопросы