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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:19:56