为了账号安全,请及时绑定邮箱和手机立即绑定

使用否定关键字进行关键字搜索

使用否定关键字进行关键字搜索

Go
墨色风雨 2022-10-17 19:15:49
我有一个关于 Go 中关键字搜索的简单问题。我想使用正负关键字搜索字符串func keyword(itemTitle string, keywords string) bool {    splits := strings.Split(keywords, ",")    for _, item := range splits {        item = strings.TrimSpace(item)        fmt.Println(strings.ToUpper(itemTitle))        fmt.Println(strings.ToUpper(item))        if strings.Contains(item,"-") {            item = item[1:]            if strings.Contains(strings.ToUpper(itemTitle), strings.ToUpper(item)) {                return false            }        }        item = item[1:]        fmt.Println(strings.ToUpper(item))        if strings.Contains(strings.ToUpper(itemTitle), strings.ToUpper(item)) {            return true        }    }    return false}这是我的搜索方法func TestKeyword(t *testing.T) {    test1 := "Pokemon Nintendo Switch Cool Thing"    keywordTest1 := "+pokemon,-nintendo"    if keyword(test1, keywordTest1) {        fmt.Println("matched")    } else {        fmt.Println("test")    }    test2 := "Pokemon Cards Cool"    if keyword(test2, keywordTest1) {        fmt.Println("matched")    } else {        fmt.Println("test")    }}我的测试用例我理解为什么它不起作用,因为 +amd 是切片中的第一个,并且它的 ofc 将返回 true 并且不测试任何其他类似 -radeon 但我只是有点难过要做什么。输出给定matchedmatched预期产出testmatched
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

我更新了你的搜索功能但保留了签名


func keyword(itemTitle string, keywords string) bool {

    a := strings.ToUpper(itemTitle)

    b := strings.ToUpper(keywords)

    keys := strings.Split(strings.Replace(b, "-", " ", -1), ",")

    for _, key := range keys {

        key = strings.TrimSpace(key)

        if strings.Contains(a, key) {

            return true

        }

    }

    return false

}

并使用通过测试和失败测试更新您的测试功能,看看它是如何工作的。


func TestKeyword(t *testing.T) {

    test1 := "Pokemon Nintendo Switch Cool Thing"

    keywordTest1 := "+pokemon,-nintendo"


    if keyword(test1, keywordTest1) {

        t.Log("matched")

    } else {

        t.Fail()

    }


    test2 := "Pokemon Cards Cool"


    if keyword(test2, keywordTest1) {

        t.Log("matched")

    } else {

        t.Fail()

    }

}

关于第二次测试失败的关键字,如果需要,您可以通过正则表达式传递它以仅获取字母数字字符。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信