登录
首页 >  Golang >  Go问答

使用正则表达式区分包含双引号和不包含双引号的字符串

来源:stackoverflow

时间:2024-03-12 11:45:26 452浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《使用正则表达式区分包含双引号和不包含双引号的字符串》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在尝试构建一个接受参数的插件,每个参数可以是双引号字符串或非双引号字符串。

有效参数的一些示例:

  1. “随机令牌”
  2. “随机令牌”34
  3. “随机令牌”

所以我试图编写一个 parseparameters 函数,它将返回两个值,一个是双引号字符串内的内容,另一个是非双引号字符串。

我尝试用两个正则表达式解决这个问题

  1. \"(.*?)\"\s*\d* - https://regex101.com/r/ub4si9/145
  2. \"(.*?)\" - https://regex101.com/r/pnh9xd/1

下面是我尝试过的代码的一个版本(但在某些情况下不起作用):

下面代码中的变量 parameters 将是一个列表。类似于 ["\"随机、"令牌\""、"45"]

paramString := strings.Join(parameters, " ")
    regex, _ := regexp.Compile(`\"(.*?)\"\s*\d*`)
    tempString := regex.FindString(paramString)
    if len(parameters) == 1 && tempString != "" {
        tempString = strings.TrimLeft(strings.TrimRight(tempString, `\"`), `\"`)
        return tempString, "", true
    }
    if paramString != tempString {
        return "", "", false
    }
    splitBySpace := strings.Split(tempString, " ")
    doubleQuoted := strings.TrimLeft(strings.TrimRight(tempString, `\"`), `\"`)
    nonDoubleQuoted := splitBySpace[len(splitBySpace)-1]
    return doubleQuoted, nonDoubleQuoted, true

预期输入和输出

输入:["\"随机", "令牌\""]

输出"random token", ""(第一个值指定双引号字符串,另一个值指定非双引号字符串)

输入:["\"随机"、"令牌\""、"45"]

输出:["\"随机令牌\"", 45]

请注意,双引号在输入中被转义。


解决方案


您可以使用 regex.findallstringsubmatch

以下函数可以完成这项工作,该函数假设输入是单个字符串,如 "random token" 32

func parse(str string) (string, string) {
    regex, _ := regexp.Compile(`("[^"]*")\s*(\S*)`)
    submatches := regex.FindAllStringSubmatch(str, -1)
    if len(submatches) == 0 {
        return "",""
    }
    return submatches[0][1], submatches[0][2]

}

您可以找到示例程序的工作链接 here

好了,本文到此结束,带大家了解了《使用正则表达式区分包含双引号和不包含双引号的字符串》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>