c#split string with“exception

c# split string with " exception

本问题已经有最佳答案,请猛点这里访问。

我想把一个字符串分成若干部分,以检索参数。

我已经做了这个功能:

1
2
3
4
5
6
7
8
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函数中做一个异常:当参数在引号之间给出时,它应该忽略其中的空格。

然后,当我像这样通过arg时:上载"C:Visual Studio",第一个参数应为C:Visual Studio

那么我如何实现这个呢?

谢谢您。


当前行为的原因是因为你在空间上分裂,所以当你发现它在空间上分裂时不应该感到震惊。

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

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

任务完成了;所有就绪的标记都被解析为遵守预期规则的独立标记。


"I want to give commands from an online website. And my app is no command line app"

你可以使用regex。

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


您可以使用regex.split方法来完成此操作。

您的代码应修改为

1
2
3
4
5
6
7
8
9
using System;
using System.Text.RegularExpressions;
static private string getparam(string input, int index)
{
   string pattern = @"[^\\s"']+|"([^"]*)"";
   string[] arrparams = Regex.Split(input,pattern);
   if (arrparams.Length <= index) return"";
   return arrparams[index];
}

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

谢谢阿伦