You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言正则匹配问题:如何提取目标子串而非完整匹配结果?

解决方法

你不需要修改正则表达式,问题出在使用的提取方法上:FindString返回的是整个正则匹配的完整字符串,而你要的是捕获分组里的内容,应该用FindStringSubmatch方法。

代码示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	mystr := "xyz/10021abc/f123"
	mystr2 := "abc/10021abd/c222"
	r := regexp.MustCompile(`(?:xyz\/|abc\/)(.+)\/`)

	// 提取第一个字符串的目标内容
	if match := r.FindStringSubmatch(mystr); len(match) > 1 {
		fmt.Println(match[1]) // 输出 10021abc
	}

	// 提取第二个字符串的目标内容
	if match := r.FindStringSubmatch(mystr2); len(match) > 1 {
		fmt.Println(match[1]) // 输出 10021abd
	}
}

可选:优化正则表达式

原正则里的.+是贪婪匹配,虽然当前场景没问题,但如果字符串结构更复杂可能会出错。可以把.+换成[^/]+,精准匹配两个斜杠之间的非斜杠字符,避免意外匹配:

r := regexp.MustCompile(`(?:xyz\/|abc\/)([^/]+)\/`)

内容的提问来源于stack exchange,提问作者drdot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:30:58