Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 子匹配内的正则表达式替换_Regex_Go - Fatal编程技术网

Regex 子匹配内的正则表达式替换

Regex 子匹配内的正则表达式替换,regex,go,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 我已经开始使用regex和ReplaceAllString的基本组合,但我很快意识到我不知道如何实现实现这一点所需的匹配组(?) package main impor

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

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

预期结果:

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
我已经开始使用regex和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 )   
}
非常感谢您提供的所有帮助。

您需要使用它,它允许您使用函数结果替换子字符串:

package main

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

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(`"([^"]*)"`)
    if err != nil {
        log.Fatal(err)
    }

    repairedLogLine := reg.ReplaceAllStringFunc(logLine, func(entry string) string {
        return strings.Replace(entry, ",", " ", -1)
    })
    fmt.Println("repairedLogLine:", repairedLogLine)
}

这很有效,谢谢!。正在阅读现在提供的文档。
package main

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

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(`"([^"]*)"`)
    if err != nil {
        log.Fatal(err)
    }

    repairedLogLine := reg.ReplaceAllStringFunc(logLine, func(entry string) string {
        return strings.Replace(entry, ",", " ", -1)
    })
    fmt.Println("repairedLogLine:", repairedLogLine)
}