From 0b7cd36b26a1b1faf514ddd1a3ec773f81785f42 Mon Sep 17 00:00:00 2001 From: cjy Date: Tue, 6 Jan 2026 09:12:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/utils/string.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/pkg/utils/string.go b/pkg/utils/string.go index daa40b8..2924c28 100644 --- a/pkg/utils/string.go +++ b/pkg/utils/string.go @@ -1,6 +1,9 @@ package utils -import "strings" +import ( + "regexp" + "strings" +) // CleanString 移除所有空白字符 func CleanString(s string) string { @@ -18,3 +21,23 @@ func TruncateString(s string, maxLen int) string { } return string(runes[:maxLen]) } + +// ExtractTags 从文本中提取标签,标签以 # 开头,后面不能直接跟空格 +func ExtractTags(s string) []string { + if len(s) == 0 { + return []string{} + } + re := regexp.MustCompile(`#[^\s#\p{P}]+`) + matches := re.FindAllString(s, -1) + + tags := make([]string, 0, len(matches)) + for _, match := range matches { + // 去掉开头的 #,只保留标签内容 + tag := match[1:] + if len(tag) > 0 { + tags = append(tags, tag) + } + } + + return tags +}