子匹配中的正则表达式替换

时间:2017-08-20 20:59:55

标签: regex go

给定一个字符串(日志文件中的一行):

Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate="12.0,18.0,24.0,36.0,48.0,54.0",host=superawesomehost.foo,foo=bar

我想用一个空格替换逗号,但只能用双引号替换。

期望的结果:

Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate="12.0 18.0 24.0 36.0 48.0 54.0",host=superawesomehost.foo,foo=bar

我已经开始使用正则表达式和ReplaceAllString的基本组合,但我很快意识到我不了解如何实现完成此任务所需的匹配组(?)。

package main

import (
    "fmt"
    "log"
    "regexp"
)

func main() {
    logLine := "Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate=\"12.0,18.0,24.0,36.0,48.0,54.0\",host=superawesomehost.foo,foo=bar"
    fmt.Println("logLine:        ", logLine)

    reg, err := regexp.Compile("[^A-Za-z0-9=\"-:]+")
        if err != nil {
                log.Fatal(err)
        }

    repairedLogLine := reg.ReplaceAllString(logLine, ",")
    fmt.Println("repairedLogLine:", repairedLogLine )   
}

非常感谢所有帮助。

1 个答案:

答案 0 :(得分:4)

您希望使用Regexp.ReplaceAllStringFunc,它允许您使用函数结果替换子字符串:

v

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