c#split string with"例外

时间:2014-07-01 13:09:02

标签: c# split arguments

我想将一个字符串拆分成几部分,以检索参数。

我已经完成了这个功能:

static private string getparam(string input, int index)
    {
        string[] arrparams = input.Split(' ');

        if (arrparams.Length <= index) return "";

        return arrparams[index];
    }

但是当我通过一个像:

这样的论点时

上传C:\ Visual Studio

它会将“C:\ Visual”视为第一个参数,将“Studio”视为第二个参数并将它们分开。

现在我想在Split-Function中做出类似异常的事情: 当引号之间给出参数时,它应该忽略其中的空格。

然后,当我像这样传递arg时: 上传“C:\ Visual Studio”,第一个参数应该是C:\ Visual Studio

那我怎么能实现呢?

谢谢。

3 个答案:

答案 0 :(得分:10)

当前行为的原因是因为你正在分裂空间,所以发现它在空间上分裂不应该是一种冲击。

但更简单的解决办法是:不要这样做。让运行时担心:

static void Main(string[] args) { ... }

完成工作;所有准备解析成符合预期规则的单独令牌。

答案 1 :(得分:4)

  

“我想从在线网站发出命令。我的应用程序不是命令行应用程序”

您可以使用Regex。

string[] arrparams = Regex.Matches(input, @"\""(?<token>.+?)\""|(?<token>[^\s]+)")
                    .Cast<Match>()
                    .Select(m => m.Groups["token"].Value)
                    .ToArray();

答案 2 :(得分:-1)

您可以使用 regex.split 方法执行此操作。

您的代码应修改为

using System;
using System.Text.RegularExpressions;
static private string getparam(string input, int index)
{
   <b>string pattern = @"[^\\s\"']+|\"([^\"]*)\"";
   string[] arrparams = Regex.Split(input,pattern);</b>
   if (arrparams.Length <= index) return "";
   return arrparams[index];
}

这个带有匹配和分割空格的粗体代码,当它是双引号时,它将采用这样的方式。 如果您发现任何问题,请回发。

由于 阿伦