[英]How can I gather tokens in C#, seperated by spaces, but ignore spaces when surrounded by quotes?
我正在制作一个个人终端,它并没有做很多事情,也没有真正的特定目的,我大多只是无聊。 在尝试研究之前,我已经将头撞在墙上大约一天了,现在尝试手动执行此操作。
当我进行研究时,我发现了这一点并对其进行了一些更改以应用于我的代码
var re = new Regex("(?<=\")[^\"]*(?=\")|[^\" ]+");
string[] NewTokens = re.Matches(fullstring).Cast<Match>().Select(m => m.Value).ToArray();
fullstring
变量是我所有的标记聚集在一起(基本上只是用户输入的命令),没有用空格分隔。 只是普通的字符串,在它被解构为一个string[]
标记之前。
我需要用空格分隔这个字符串,但是当有引号时忽略它。 例如,如果我想创建一个将消息打印到控制台的命令,我会这样做: print "Hello World!"
作为我的命令。 我想要的 output 是:
[0] -> 打印
[1] -> 世界你好!
该代码示例似乎有效......但是当我尝试运行一个没有引号的命令时:
(打印是帮助命令寻找的命令)
help print
output 是:
[0] -> 帮助打印
令牌应该是:
[0] -> 帮助 [1] -> 打印
请帮忙。 通常我不会寻求帮助,但我真的无法在线或自己找到解决此问题的方法。
只需以这种方式更改 Select 即可返回匹配组
string[] NewTokens = re.Matches(fullstring).Select(m => m.Groups[0].Value).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.