有没有办法在regexp中插入变量?

hkmswyz6  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(186)

我正在尝试使用基于用户输入的正则表达式模式,该模式保存在一个变量中。该变量将用于正则表达式搜索模式。
下面是city被硬编码为regex模式时可以正常工作的部分代码:

//city.txt has the following input information:

    //Boston 100 AA BB
    //Chicago 200 CC DD

    //Get user input

    fmt.Print("Enter city: ")
    scanner.Scan()
    city:= scanner.Text()

    //Read file from text and convert to string

    citylist, _ := ioutil.ReadFile("city.txt")
    convertcitytostring:= string(citylist)

    //Use regexp to search the citylist(str)

    search1:= regexp.MustCompile(`Boston\s\S.*`)
    search2:= search1.FindString(convertcitytostring)

    //Convert results to []string

    search3:= strings.Fields(search2)

    //Print

    fmt.Printf("%v %T", search3, search3)
    fmt.Printf("\n")

    //Output:
    //[Boston 100 AA BB] []string

我想做的是使用变量“city”代替硬编码模式:

search1:= regexp.MustCompile(`city\s\S.*`)
    search2:= search1.FindString(convertSitestoString)
z4iuyo4d

z4iuyo4d1#

regexp.MustCompile的输入是一个字符串,只需将变量与模式的其余部分连接起来即可;

city := "Boston"
search1:= regexp.MustCompile(regexp.QuoteMeta(city) + `\s\S.*`)

确保对用户输入(regexp.QuoteMeta)进行转义,以防止特殊字符被视为模式。

相关问题