Golang正则表达式分割字符串:如何获取指定子串集合?
解决Golang regexp拆分特定字符串为多个子串的问题
针对你的需求,我们可以用一个正则表达式直接匹配出前缀和所有后缀的属性/方法片段,具体正则如下:
(@[a-zA-Z0-9]+\$[a-zA-Z0-9]+)|(\.[a-zA-Z_][a-zA-Z0-9_]*(?:\[[^\]]+\])?(?:\([^)]*\))?)
正则规则说明:
(@[a-zA-Z0-9]+\$[a-zA-Z0-9]+):匹配字符串开头的前缀部分,即@+字母数字串+$+字母数字串。\.[a-zA-Z_][a-zA-Z0-9_]*:匹配.开头的标识符,符合Go语言的标识符命名规则(首字符为字母/下划线,后续为字母/数字/下划线)。(?:\[[^\]]+\])?:可选的下标部分(比如.result[0]中的[0]),非捕获组,匹配[到]之间的任意非]字符。(?:\([^)]*\))?:可选的方法调用部分(比如.xTrim()中的()),非捕获组,匹配(到)之间的任意非)字符。
Golang代码示例:
package main import ( "fmt" "regexp" ) func main() { inputStr := "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()" // 编译正则表达式 re := regexp.MustCompile(`(@[a-zA-Z0-9]+\$[a-zA-Z0-9]+)|(\.[a-zA-Z_][a-zA-Z0-9_]*(?:\[[^\]]+\])?(?:\([^)]*\))?)`) // 提取所有匹配的子串 variableParts := re.FindAllString(inputStr, -1) // 输出结果 fmt.Println("拆分后的子串数组:") for i, part := range variableParts { fmt.Printf("第%d个元素:%s\n", i+1, part) } }
运行结果:
拆分后的子串数组: 第1个元素:@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5 第2个元素:.result 第3个元素:.result[0] 第4个元素:.code 第5个元素:.xTrim()
这个方案会把你需要的前缀和每个后缀片段都拆分成独立的数组元素,完全满足你的需求。原正则的问题在于只将字符串拆分为前缀和剩余整体两部分,所以只能得到3个元素(整个匹配结果、前缀分组、剩余内容分组),而新正则通过全局匹配所有目标片段,直接得到所有需要的子串。
内容的提问来源于stack exchange,提问作者oakkose
相关产品推荐
相关产品推荐

