首页 > 解决方案 > 获取特定格式的子字符串

问题描述

我有一个这种格式的字符串:

2002:4 2003:"\x02\x00\x04\x01" 2004:"\x00\x06\x03" 2005:1 2006:"YYYY-MM-DD" 3000:"Date time" 3001:"01/01/1900" 3002:"07/20/2020"

我只对值感兴趣3000:"Date time", 3001: "01/01/1900", 3002:"07/20/2020"- 高于 3000 的值。最初,我尝试在空格处拆分字符串以获取不同的示例。但在这里,“日期时间”也有一个空格。所以在这种情况下我的逻辑就坏了。我是 Golang 的新手,所以我想知道在 Go 中执行此操作的最佳方法是什么?我可以尝试使用正则表达式还是一个坏主意?

标签: arraysregexstringgosplit

解决方案


如果引号中的字符串3000:从不包含其他双引号字符",则可以使用如下正则表达式:

30\d+:".*?"

一个更完整的 Go 代码片段(根据你的实际需要进行调整):

package main

import (
    "fmt"
    "regexp"
)

const s = `2002:4 2003:"\x02\x00\x04\x01" 2004:"\x00\x06\x03" 2005:1 2006:"YYYY-MM-DD" 3000:"Date time" 3001:"01/01/1900" 3002:"07/20/2020"
`

func main() {

    re, err := regexp.Compile(`30\d+:".*?"`)
    if err != nil {
        panic(err)
    }
    matches := re.FindAllString(s, -1)
    fmt.Println(matches) // [3000:"Date time" 3001:"01/01/1900" 3002:"07/20/2020"]
}

推荐阅读