通过正则表达式匹配组迭代

时间:2017-05-04 21:58:21

标签: regex go

说我的数据如下:

name=peter 
age=40
id=99

我可以创建一个正则表达式

(\w+)=(\w+)

将name,age和id匹配到group1,将peter,40,99匹配到第二组。但是,我想迭代甚至有选择地遍历这些组。如,

如果group1值为id,我想进行不同的处理。所以算法就像

//iterate through all the group1, if I see group1 value is "id", then I assign the corresponding group2 key to some other variable. E.g., newVar = 99

我要做的第二件事就是跳转到匹配group1的第三个实例并获取键“id”而不是迭代。

1 个答案:

答案 0 :(得分:1)

使用FindAllStringSubmatch查找所有匹配项:

pat := regexp.MustCompile(`(\w+)=(\w+)`)
matches := pat.FindAllStringSubmatch(data, -1) // matches is [][]string

迭代匹配的组,如下所示:

for _, match := range matches {
    fmt.Printf("key=%s, value=%s\n", match[1], match[2])
}

通过与match [1]比较来检查“id”:

for _, match := range matches {
    if match[1] == "id" {
        fmt.Println("the id is: ", match[2])
    }
}

通过索引获取第三场比赛:

match := matches[2] // third match
fmt.Printf("key=%s, value=%s\n", match[1], match[2])

playground example