C# 将控制台中的用户输入解析为c中的命令行参数

C# 将控制台中的用户输入解析为c中的命令行参数,c#,.net-4.0,console-application,C#,.net 4.0,Console Application,我需要在我正在制作的控制台应用程序中拆分用户对空格的输入,但我不太确定如何做到这一点。我不能盲目地分割它,因为它会引用字符串之类的东西。做这件事的快捷方法是什么 或者有什么方法可以访问windows命令行解析器并使用它将其拆分?当您在Visual Studio中创建新的控制台应用程序时,您会得到如下结果: class Program { static void Main(string[] args) { } } static void Main(string[] arg

我需要在我正在制作的控制台应用程序中拆分用户对空格的输入,但我不太确定如何做到这一点。我不能盲目地分割它,因为它会引用字符串之类的东西。做这件事的快捷方法是什么


或者有什么方法可以访问windows命令行解析器并使用它将其拆分?

当您在Visual Studio中创建新的控制台应用程序时,您会得到如下结果:

class Program
{
    static void Main(string[] args)
    {
    }
}
static void Main(string[] args)
{
    Console.WriteLine("Input please:");
    string input = Console.ReadLine();
    // Parse input with Regex (This splits based on spaces, but ignores quotes)
    Regex regex = new Regex(@"\w+|""[\w\s]*""");
}

传递给应用程序的命令行参数将位于“args”参数中。

在Visual Studio中创建新的控制台应用程序时,会得到如下结果:

class Program
{
    static void Main(string[] args)
    {
    }
}
static void Main(string[] args)
{
    Console.WriteLine("Input please:");
    string input = Console.ReadLine();
    // Parse input with Regex (This splits based on spaces, but ignores quotes)
    Regex regex = new Regex(@"\w+|""[\w\s]*""");
}

传入应用程序的命令行参数将位于“args”参数中。

控制台应用程序中的用户输入仅为:

您可能想尝试以下方法:

class Program
{
    static void Main(string[] args)
    {
    }
}
static void Main(string[] args)
{
    Console.WriteLine("Input please:");
    string input = Console.ReadLine();
    // Parse input with Regex (This splits based on spaces, but ignores quotes)
    Regex regex = new Regex(@"\w+|""[\w\s]*""");
}

控制台应用程序中的用户输入仅为:

您可能想尝试以下方法:

class Program
{
    static void Main(string[] args)
    {
    }
}
static void Main(string[] args)
{
    Console.WriteLine("Input please:");
    string input = Console.ReadLine();
    // Parse input with Regex (This splits based on spaces, but ignores quotes)
    Regex regex = new Regex(@"\w+|""[\w\s]*""");
}

要将输入读取为字符串,我将使用:

string stringInput = Console.ReadLine();

要将输入读取为字符串,我将使用:

string stringInput = Console.ReadLine();

好吧,你必须建立自己的传感器。基本上,在main中,您只需要一个switch语句和一个Console.ReadLine。当用户运行您的可执行文件时,您可以输出类似Enter命令的内容:并等待用户的输入。然后捕获用户输入并打开它

class Program
{
    static void Main(string[] args)
    {       
        string cmd = Console.ReadLine();
        switch(cmd)
        {
            case "DoStuff":
                someClass.DoStuff();
                break;
            case "DoThis":
                otherClass.DoThis();
                break;
        }       
    }
}

如果你想继续接收来自用户的输入命令,那么只需在while循环中包装类似的内容,当用户想要退出时,中断循环并终止程序。

那么,你必须构建自己的传感器。基本上,在main中,您只需要一个switch语句和一个Console.ReadLine。当用户运行您的可执行文件时,您可以输出类似Enter命令的内容:并等待用户的输入。然后捕获用户输入并打开它

class Program
{
    static void Main(string[] args)
    {       
        string cmd = Console.ReadLine();
        switch(cmd)
        {
            case "DoStuff":
                someClass.DoStuff();
                break;
            case "DoThis":
                otherClass.DoThis();
                break;
        }       
    }
}
如果你想继续接收来自用户的输入命令,那么只需在while循环中包装类似的内容,当用户想要退出时,打破循环并终止程序。

多亏了,我终于得到了它。这将检查引号,但不担心嵌套引号。根据对的注释,如何知道它是两个引号还是嵌套引号。您不能真正按空格,因为字符串可以以空格开头或结尾

using System.Text.RegularExpressions;
...
Console.Write("Home>");
string command = Console.ReadLine();
Regex argReg = new Regex(@"\w+|""[\w\s]*""");
string[] cmds = new string[argReg.Matches(command).Count];
int i = 0;
foreach (var enumer in argReg.Matches(command))
{
    cmds[i] = (string)enumer.ToString();
    i++;
}
多亏了你,我终于得到了它。这将检查引号,但不担心嵌套引号。根据对的注释,如何知道它是两个引号还是嵌套引号。您不能真正按空格,因为字符串可以以空格开头或结尾

using System.Text.RegularExpressions;
...
Console.Write("Home>");
string command = Console.ReadLine();
Regex argReg = new Regex(@"\w+|""[\w\s]*""");
string[] cmds = new string[argReg.Matches(command).Count];
int i = 0;
foreach (var enumer in argReg.Matches(command))
{
    cmds[i] = (string)enumer.ToString();
    i++;
}


我对我的问题进行了编辑,使之更清楚。这不是我所说的。事实上,这确实回答了你的问题,因为它似乎是措辞。您可以通过检查该数组的元素来解析参数。关于解析,您具体想知道什么,因为您的问题是一般性的,这个答案回答了这个问题。好的,编辑了我的问题。我说的是控制台中的用户输入。我对我的问题进行了编辑以使其更清晰。这不是我所说的。事实上,这确实回答了你的问题,因为它似乎是措辞。您可以通过检查该数组的元素来解析参数。关于解析,您具体想知道什么,因为您的问题是一般性的,这个答案回答了这个问题。好的,编辑了我的问题。我说的是控制台中的用户输入;传递给应用程序的参数。你想要什么?只是用户输入到控制台?是的,用户输入。我已经编辑了我的问题。啊,好的。这个正则表达式应该解析您的输入:或者这可能更有用:下面我的答案是如何处理您自己的控制台类型应用程序。您必须像平常一样接受输入并自己解析它。您需要为引用字符串、无字符串或任何其他您想要支持的内容提供支持……关于否决票,很抱歉这个问题的编写方式,但它现在好还是可以改进?命令行参数通常是@James在回答中提到的;传递给应用程序的参数。你想要什么?只是用户输入到控制台?是的,用户输入。我已经编辑了我的问题。啊,好的。这个正则表达式应该解析您的输入:或者这可能更有用:下面我的答案是如何处理您自己的控制台类型应用程序。您必须像平常一样接受输入并自己解析它。您需要提供对带引号的字符串、无字符串或任何其他您想要支持的字符串的支持…关于否决票,很抱歉这个问题的编写方式,但它现在是好的还是仍然可以改进?@ArlenBeiler OK。您需要解析什么?这会给你一个字符串,你可以使用它,或者看看…没有一种解析方法,它高度依赖于你想要什么。好吧,也许我不是很清楚。我
我更新了我的问题,希望能有所帮助。@ArlenBeiler我编辑了我的答案以反映你的最新编辑。此处的正则表达式将基于空格拆分字符串,但将忽略引号中的空格。这将识别嵌套引号,还是只替换它传递的每个引号。它将只识别一个引号,后跟一个文本。您可以让它查找其他引用,但我不知道如何确定它是否是嵌套的引用,例如:这是嵌套的引用,这意味着整个内容是一个引用,还是意味着两个引用之间有文本?看着它对我们来说似乎很容易,但如果不知道会发生什么,编写识别程序对计算机来说将非常困难。@ArlenBeiler OK。您需要解析什么?这会给你一个字符串,你可以使用它,或者看看…没有一种解析方法,它高度依赖于你想要什么。好吧,也许我不是很清楚。我已经更新了我的问题,希望能有所帮助。@ArlenBeiler我编辑了我的答案以反映您的最新编辑。此处的正则表达式将基于空格拆分字符串,但将忽略引号中的空格。这将识别嵌套引号,还是只替换它传递的每个引号。它将只识别一个引号,后跟一个文本。您可以让它查找其他引用,但我不知道如何确定它是否是嵌套的引用,例如:这是嵌套的引用,这意味着整个内容是一个引用,还是意味着两个引用之间有文本?看着它对我们来说似乎很容易,但编程识别将是非常困难的一台计算机不知道会发生什么。