在Go语言开发中,经常需要从字符串中提取括号内的内容。本文将介绍三种实用的方法,帮助开发者高效处理这类需求。
正则表达式是最常用的提取括号内容的方法:
package main
import (
"fmt"
"regexp"
)
func main() {
str := "这是一个(示例)字符串,包含(多个)括号"
re := regexp.MustCompile(`\((.*?)\)`)
matches := re.FindAllStringSubmatch(str, -1)
for _, match := range matches {
fmt.Println(match[1])
}
}
对于简单场景,可以使用strings包的函数:
package main
import (
"fmt"
"strings"
)
func extractBetween(str, start, end string) string {
startIndex := strings.Index(str, start)
if startIndex == -1 {
return ""
}
startIndex += len(start)
endIndex := strings.Index(str[startIndex:], end)
if endIndex == -1 {
return ""
}
return str[startIndex : startIndex+endIndex]
}
func main() {
str := "这是一个(示例)字符串"
content := extractBetween(str, "(", ")")
fmt.Println(content)
}
对于复杂需求,可以手动遍历字符串:
package main
import "fmt"
func extractParentheses(str string) []string {
var result []string
var stack []int
for i, char := range str {
if char == '(' {
stack = append(stack, i+1)
} else if char == ')' && len(stack) > 0 {
start := stack[len(stack)-1]
stack = stack[:len(stack)-1]
result = append(result, str[start:i])
}
}
return result
}
func main() {
str := "(第一个)内容(第二个)内容"
contents := extractParentheses(str)
for _, content := range contents {
fmt.Println(content)
}
}
三种方法各有优劣:
方法三的手动遍历方法可以处理嵌套括号,而正则表达式在标准库中不支持递归匹配。
可以修改正则表达式为[\(\[\{](.*?)[\)\]\}],或扩展手动遍历方法支持多种括号。
调整匹配模式,将捕获组的边界适当外移即可。
通过本文介绍的三种方法,开发者可以根据实际需求选择最适合的方案来提取Go字符串中括号内的内容。