正则表达式按组获取匹配项

我想解析一个字符串并获取两个引号内的子字符串


主题

query="tag1 tag2"

图案

query="([a-z ]*)"

结果

tag1 tag2

代码

package main


import (

  "fmt"

  "regexp"

)


var re = regexp.MustCompile(`query="([a-z ]*)"`)


func main() {

  match  := re.FindStringSubmatch(`query="tag1 tag2"`)

  result := make(map[string]string)

  for i, name := range re.SubexpNames() {

     result[name] = match[i]

  }

  fmt.Printf("by name: %v\n", result)

}

http://play.golang.org/p/voKpOlcc8J


更新

细绳


query="tag1 tag2 tag3" foo="wee"

火柴 tag1 tag2 tag3


package main


import "fmt"

import "regexp"


func main() {

    var str string = `query="tag1 tag2 tag3" foo="wee"`

    re := regexp.MustCompile(`query="(([a-z0-9]+) ?)*"`)

    match := re.FindStringSubmatch(str)

    if len(match) == 0 {

        fmt.Print("no matches")

    } else {

        result := make(map[string]string)

        for i, name := range re.SubexpNames(){

            result[name] = match[i]

        }

        fmt.Print(result)

    }

}

http://play.golang.org/p/8vieH4eDd1


三国纷争
浏览 223回答 3
3回答

米琪卡哇伊

您可以提取整个标签字符串,然后提取Split()它。package mainimport (    "fmt"    "regexp"    "strings")func main() {    var str string = `query="tag1 tag2 tag3" foo="wee"`    re := regexp.MustCompile(`query="(.+?)"`)    match := re.FindStringSubmatch(str)    if len(match) == 2 {        fmt.Println(strings.Split(match[1], " "))    }}输出: [tag1 tag2 tag3]

月关宝盒

首先,模式将与数字不匹配。您可能希望将其更改为:var re = regexp.MustCompile(`query="(.*)"`)然后,为了获取子字符串,您可以使用FindStringSubmatch:match := re.FindStringSubmatch(`query="tag1 tag2"`)if len(match) == 2 {    fmt.Printf("Found: [%s]\n", match[1])} else {    fmt.Println("No match found", match)}输出:找到:[tag1 tag2]然后,为了将字符串拆分为单独的标签,我建议使用 strings.Split
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go