我正在尝试创建一个可以解析由大写单词后跟零个或多个封装在双引号中的参数组成的字符串的函数。
例如,以下每一行:
COPY "filename one" "filename two"
REMOVE "filename"
LIST "x" "y" "z"
DISCONNECT
Run Code Online (Sandbox Code Playgroud)
结果应该是一个字符串(命令),后跟一个字符串[](引号内的参数)。我创建了以下正则表达式:
re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)
results := re1.FindAllStringSubmatch(input, -1)
Run Code Online (Sandbox Code Playgroud)
然而,无论我如何尝试,只有最后一个参数被捕获。
我的问题的一个例子:https ://play.golang.org/p/W1rE1X4SWf5
"arg1"
本例中未捕获。我缺少什么?
如果您的命令定义良好,ei 命令名称始终为大写,并且参数始终位于命令之后,那么较宽松的正则表达式可能适合您的用例:
re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1863 次 |
最近记录: |