首页 > 解决方案 > 正则表达式的问题。nil 切片和 FindStringSubmatch

问题描述

我正在尝试正则表达式模式:

random-text (800)

我正在做这样的事情:

func main() {

    rando := "random-text (800)"
    parsedThing := regexp.MustCompile(`\((.*?)\)`)
    match := parsedThing.FindStringSubmatch(rando)
    if match[1] == "" {
        fmt.Println("do a thing")
    }
        if match[1] != "" {
        fmt.Println("do a thing")
    }
    
}

我只想捕获括号中的内容,但FindString正在解析 ()。我也试过FindStringSubmatch了,这很好,我可以在切片中指定捕获组,但是我的单元测试中有一个错误,切片是 . 我需要测试一个空字符串,因为这是可能发生的事情。有没有更好的正则表达式,我可以使用它只会在括号内捕获?或者有没有更好的方法来处理 nil 切片的错误。

标签: regexgo

解决方案


我通常nil根据文档进行比较:

返回值nil表示不匹配。

package main

import (
   "fmt"
   "regexp"
)

func main() {
   re := regexp.MustCompile(`\((.+)\)`)
   find := re.FindStringSubmatch("random-text (800)")
   if find != nil {
      fmt.Println(find[1] == "800")
   }
}

推荐阅读