regex - 如何使用正则表达式分隔双引号字符串和非双引号字符串?
问题描述
我正在尝试构建一个接受参数的插件,每个参数可以是双引号字符串或非双引号字符串。
有效参数的一些示例:
"random token"
"random token" 34
"randomtoken"
所以我正在尝试编写一个parseParameters
返回两个值的函数,一个是双引号字符串中的内容,另一个是非双引号字符串。
我尝试用两个正则表达式解决这个问题
\"(.*?)\"\s*\d*
- https://regex101.com/r/uB4sI9/145\"(.*?)\"
- https://regex101.com/r/Pnh9Xd/1
下面是我尝试过的代码的一个版本(虽然在某些情况下不起作用):
下面代码中的变量parameters
将是一个列表。像 ["\"random, "token\"", "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\""]
输出:("random token", ""
第一个值指定双引号字符串,而另一个值指定非双引号字符串)
输入:["\"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]
}
您可以在此处找到示例程序的工作链接
推荐阅读
- javascript - 猫鼬 findOneAndUpdate 查询从函数返回未定义
- asp.net-mvc - 如何在控制器的 ActionResult 方法中将模型类型转换为视图模型类型
- node.js - axios 无法从另一个 localhost 获取 json 数据
- sql-server - SQL Server:过滤具有所有者匹配地址但多个地址编号的记录
- vue.js - vue-router 的屏幕阅读器和选项卡焦点重置
- python - 将补丁(32x32)插入图像(256x256),如何?
- vbscript - 禁用 WoW64 重定向
- php - Progressive minimum cart items quantity count limitation in Woocommerce
- azure-virtual-network - 具有内部负载平衡器的对等 VNET 的安全性
- react-native - react-native 中的 ImageResizeMode