gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:36:13 24 4
gpt4 key购买 nike

代码:

package main

import (
"fmt"
"regexp"
)

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

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

如何获取括号内的值?

最佳答案

1- 虽然使用正则表达式很简单(在 The Go Playground 上尝试):

package main

import (
"fmt"
"regexp"
)

var rgx = regexp.MustCompile(`\((.*?)\)`)

func main() {
s := `(tag)SomeText`
rs := rgx.FindStringSubmatch(s)
fmt.Println(rs[1])
}

输出:

tag

2- 但有时使用 strings.Index 足够快(在 The Go Playground 上尝试):

package main

import (
"fmt"
"strings"
)

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

func main() {
s := `Some(tag)Text`
r := match(s)
fmt.Println(r)

}

输出:

tag

3- 这个简单的基准显示使用正则表达式需要 931 毫秒,使用 strings.Index 需要 43 毫秒进行 1000000 次迭代。

package main

import (
"fmt"
"regexp"
"strings"
"time"
)

var rgx = regexp.MustCompile(`\((.*?)\)`)

const n = 1000000

func main() {
var rs []string
var r string
s := `(tag)SomeText`
t := time.Now()
for i := 0; i < n; i++ {
rs = rgx.FindStringSubmatch(s)
}
fmt.Println(time.Since(t))
fmt.Println(rs[1]) // [(tag) tag]

t = time.Now()
for i := 0; i < n; i++ {
r = match(s)
}
fmt.Println(time.Since(t))
fmt.Println(r)

}

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

关于regex - Golang 正则表达式在括号内获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com