Regex Golang正则表达式在括号内获取值

Regex Golang正则表达式在括号内获取值,regex,go,Regex,Go,代码: 如何获得括号内的值?我用这个正则表达式解决了我的问题 package main import ( "fmt" "regexp" ) func main() { r := regexp.MustCompile(`((.*))`) s := `(tag)SomeText` res := r.FindStringSubmatch(s) fmt.Println(res[1]) } 1-虽然使用正则表达式很简单(请试用): 主程序包 进口(

代码:


如何获得括号内的值?

我用这个正则表达式解决了我的问题

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`((.*))`)
    s := `(tag)SomeText`

    res := r.FindStringSubmatch(s)
    fmt.Println(res[1])
}

1-虽然使用正则表达式很简单(请试用):

主程序包
进口(
“fmt”
“regexp”
)
var rgx=regexp.MustCompile(`\(.*?)`)
func main(){
s:=`(标记)SomeText`
rs:=rgx.FindStringSubmatch(s)
fmt.Println(rs[1])
}
输出:

r := regexp.MustCompile(`\((.*?)\)`)
标签

2-但有时使用
字符串。索引
足够快(试试):

主程序包
进口(
“fmt”
“字符串”
)
func匹配(s字符串)字符串{
i:=strings.Index(“”)
如果i>=0{
j:=字符串。索引(“)”)
如果j>=0{
返回s[i+1:j]
}
}
返回“”
}
func main(){
s:=`一些(标记)文本`
r:=匹配项
fmt.Println(右)
}
输出:

r := regexp.MustCompile(`\((.*?)\)`)

3-这个简单的基准测试显示使用正则表达式需要931ms,使用
字符串需要43ms,迭代次数为1000000次

主程序包
进口(
“fmt”
“regexp”
“字符串”
“时间”
)
var rgx=regexp.MustCompile(`\(.*?)`)
常数n=1000000
func main(){
var rs[]字符串
var字符串
s:=`(标记)SomeText`
t:=时间。现在()
对于i:=0;i=0{
j:=字符串。索引(“)”)
如果j>=0{
返回s[i+1:j]
}
}
返回“”
}

参考答案,我制作了我的代码版本。 链接:


嘿,谢谢。是的,对于我的程序来说,执行速度真的很重要:)match函数在返回中有一个输入错误-它在运行时产生一个slice bounds out-range错误。如果i>=0{j:=strings.Index(“”),则返回s[i+1:j+i]
func匹配(s string)string{i:=strings.Index(“”);如果j>=0{returns[i+1:j+i]}}则返回}
package main

import (
    "fmt"
    "strings"
)

func match(start, end, s string) string {
    i := strings.Index(s, start)
    if i >= 0 {
        j := strings.Index(s[i:], end)
        if j >= 0 {
            return s[i+len(start) : i+j]
        }
    }
    return ""
}

func main() {
    errText := `facebook: Error validating access token: Session has expired on Tuesday, 28-Jul-20 22:00:00 PDT. The current time is Wednesday, 29-Jul-20 17:55:22 PDT. (code: 190; error_subcode: 463, error_user_title: , error_user_msg: )`
    start := "code: "
    end := ";"
    r := match(start, end, errText)
    fmt.Println(r)
}