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

Golang正则匹配错误无法正确提取选择题选项该如何解决?

问题原因

你原来的正则[A-E]\.(\S+)?中,\S匹配所有非空白字符,作为选项标记的大写字母B/C/D也属于非空白字符,因此匹配会持续到行尾的换行符位置,将相邻选项内容吞入匹配结果,不是单纯的贪婪模式问题,是匹配终止条件设置错误。

解决方案

根据你的场景(选项内容仅包含中文和顿号),可以使用限制匹配范围的正则实现正确提取:

package main

import (
    "fmt"
    "regexp"
    "testing"
)

func TestRegex(t *testing.T) {
    text := `( B )38.目前,亚马逊美国站后台,除了有美国站点外,还有(    )站点。
A.英国、法国B.加拿大、墨西哥
C.葡萄牙、加拿大D.墨西哥、德国
`
    // 调整后的正则:匹配A-E加.,后面捕获所有中文和顿号
    reg := regexp.MustCompile(`[A-E]\.([\p{Han}、]+)`)
    result := reg.FindAllStringSubmatch(text, -1)
    fmt.Printf("%q\n", result)
}

运行结果

输出完全符合你的预期:

[["A.英国、法国" "英国、法国"] ["B.加拿大、墨西哥" "加拿大、墨西哥"] ["C.葡萄牙、加拿大" "葡萄牙、加拿大"] ["D.墨西哥、德国" "墨西哥、德国"]]

通用场景适配

如果你的选项可能包含数字、英文等其他字符(不会出现A./B.这类选项标记格式的内容),可以用支持正向预查的正则(Golang RE2引擎已支持正向预查):

reg := regexp.MustCompile(`[A-E]\.(.*?)(?=[A-E]\.|$)`)

这个正则会匹配A-E加.之后的内容,直到下一个选项标记或者文本结束为止,适配更多内容格式的选项提取。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:02