插件窝 干货文章 Go语言中如何高效提取括号内的内容?3种方法详解

Go语言中如何高效提取括号内的内容?3种方法详解

Go语言 正则表达式 字符串处理 括号提取 Go编程    来源:    2025-08-06

Go语言中如何高效提取括号内的内容?3种方法详解

在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包

对于简单场景,可以使用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)
    }
}

性能比较

三种方法各有优劣:

  • 正则表达式:代码简洁,适合简单模式
  • strings包:性能较好,适合固定分隔符
  • 手动遍历:最灵活,可以处理嵌套括号等复杂情况

常见问题解答

1. 如何处理嵌套括号?

方法三的手动遍历方法可以处理嵌套括号,而正则表达式在标准库中不支持递归匹配。

2. 如何提取多种括号的内容?

可以修改正则表达式为[\(\[\{](.*?)[\)\]\}],或扩展手动遍历方法支持多种括号。

3. 提取的内容包含括号本身怎么办?

调整匹配模式,将捕获组的边界适当外移即可。

通过本文介绍的三种方法,开发者可以根据实际需求选择最适合的方案来提取Go字符串中括号内的内容。