繁体   English   中英

如何在 C# 中收集令牌,用空格分隔,但在用引号括起来时忽略空格?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM