Go语言解析动漫影视标题集数报错的解决方案咨询
解决Go动漫解析应用中的集数提取与类型区分问题
问题背景
开发与动漫网站交互的Go应用时,需同时处理带编号的常规剧集与无编号的电影/OVA内容。解析如“One Piece Film: Z - Filme”这类标题时,因无预期集数编号,strconv.Atoi转换空字符串触发报错:
Error parsing episode number 'One Piece Film: Z - Filme': strconv.Atoi: parsing "": invalid syntax
原extractEpisodeNumber函数预期无数字时返回"1",但实际仍出现报错,需要优化逻辑以避免转换错误,并精准区分内容类型。
优化思路
核心解决两点:
- 确保集数返回值始终合法:无论标题是否含数字,都返回可直接使用的整数,彻底消除
strconv.Atoi转换报错 - 精准识别内容类型:通过关键词(如Film/OVA/剧场版等)区分电影/OVA与常规剧集,避免仅依赖数字存在性的误判
优化后代码实现
package main import ( "fmt" "regexp" "strconv" ) // extractEpisodeInfo 返回集数和是否为电影/OVA的标识 func extractEpisodeInfo(title string) (int, bool) { // 匹配电影/OVA相关关键词(不区分大小写,支持英文、中文关键词) movieOVAKeywords := regexp.MustCompile(`(?i)(film|ova|movie|special|剧场版|SP)`) isMovieOVA := movieOVAKeywords.MatchString(title) if isMovieOVA { return 1, true } // 优先匹配常规剧集标识(Episode/EP/Ep等)后的数字,避免误提取年份等无关数字 episodeMarkerRegex := regexp.MustCompile(`(?i)(episode|ep)\s*(\d+)`) matchGroups := episodeMarkerRegex.FindStringSubmatch(title) if len(matchGroups) >= 3 { num, _ := strconv.Atoi(matchGroups[2]) return num, false } // 兜底:提取标题中第一个连续数字作为集数 numRegex := regexp.MustCompile(`\d+`) numStr := numRegex.FindString(title) if numStr != "" { num, _ := strconv.Atoi(numStr) return num, false } // 极端情况:无数字且无电影标识,默认返回1并标记为电影/OVA return 1, true } func main() { testTitles := []string{ "One Piece Episode 1", "One Piece Film: Z - Filme", "Attack on Titan EP 25", "Naruto Shippuden Special: The Day Naruto Became Hokage", "BLEACH 剧场版:地狱篇", "Demon Slayer 2024 Episode 12", "Fullmetal Alchemist Brotherhood", // 无数字无标识的极端情况 } for _, title := range testTitles { epNum, isMovie := extractEpisodeInfo(title) contentType := "常规剧集" if isMovie { contentType = "电影/OVA" } fmt.Printf("标题:'%s' → 类型:%s,集数:%d\n", title, contentType, epNum) } }
代码说明
- 类型识别:通过正则匹配不区分大小写的多语言关键词,精准标记电影/OVA内容,避免仅靠数字存在性的误判
- 集数提取优先级:
- 优先匹配
Episode/EP等标识后的数字,避免提取标题中的年份、作品编号等无关信息 - 无剧集标识时,提取标题中第一个连续数字作为集数
- 极端场景(无数字无标识)默认返回1并标记为电影/OVA,确保返回值始终合法
- 优先匹配
- 错误规避:直接返回整数类型的集数,无需再调用
strconv.Atoi,彻底消除转换报错风险
运行结果
标题:'One Piece Episode 1' → 类型:常规剧集,集数:1 标题:'One Piece Film: Z - Filme' → 类型:电影/OVA,集数:1 标题:'Attack on Titan EP 25' → 类型:常规剧集,集数:25 标题:'Naruto Shippuden Special: The Day Naruto Became Hokage' → 类型:电影/OVA,集数:1 标题:'BLEACH 剧场版:地狱篇' → 类型:电影/OVA,集数:1 标题:'Demon Slayer 2024 Episode 12' → 类型:常规剧集,集数:12 标题:'Fullmetal Alchemist Brotherhood' → 类型:电影/OVA,集数:1
内容的提问来源于stack exchange,提问作者killerbyte
相关产品推荐
相关产品推荐

