为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
三国纷争 2021-09-27 21:19:49
我想解析一个字符串并获取两个引号内的子字符串主题query="tag1 tag2"图案query="([a-z ]*)"结果tag1 tag2代码package mainimport (  "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 tag3package mainimport "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
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您可以提取整个标签字符串,然后提取Split()它。


package main


import (

    "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]


查看完整回答
反对 回复 2021-09-27
?
月关宝盒

TA贡献1772条经验 获得超5个赞

首先,模式将与数字不匹配。您可能希望将其更改为:


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


查看完整回答
反对 回复 2021-09-27
  • 3 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信