Golang正则表达式无法匹配含下划线日期,求助解决方法
问题分析与解决建议
你的正则匹配失败主要有两个核心原因:
1. 正则模式与目标日期格式不匹配
你的示例字符串里的日期只有年-月(如2023_10)或两位年份-月(如20-04)的结构,但你写的正则要求匹配年-月-日或日-月-年这种三部分的日期格式,自然无法匹配到目标内容。
2. 单词边界\b的使用错误
Golang的正则中,\b是Unicode单词边界,而下划线_属于单词字符(\w包含字母、数字、下划线),所以像_2023这种场景,下划线和数字之间不存在单词边界,导致\b无法正确定位日期的起始/结束位置。
修正后的代码
调整正则模式,匹配年-月或两位年份-月的结构,并移除无效的\b,同时优化正则编译逻辑:
package main import ( "fmt" "regexp" ) func main() { strings := []string{ "mid_monthly_2023_10_mac", "mid_monthly_2023_11_mac", "mid_monthly-20-04-end", "mid_monthly-19-6-end", } // 匹配 四位年-月 或 两位年-月 的结构,支持_或-分隔 pattern := `(?:\d{4}[-_]\d{1,2}|\d{2}[-_]\d{1,2})` // 预编译正则,避免循环内重复编译(优化性能) re := regexp.MustCompile(pattern) for _, str := range strings { matches := re.FindAllString(str, -1) fmt.Println(matches) } }
运行结果:
[2023_10] [2023_11] [20-04] [19-6]
内容的提问来源于stack exchange,提问作者Luis Louis
相关产品推荐
相关产品推荐

