【问题标题】:c# split string with " exception [duplicate]c#用“异常分割字符串
【发布时间】:2014-08-22 01:33:37
【问题描述】:

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

我已经做了那个功能:

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

那么我该如何实现呢?

谢谢。

【问题讨论】:

标签: c# split arguments


【解决方案1】:

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

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

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

工作完成;所有已准备好解析为符合预期规则的单独标记。

【讨论】:

  • 或者你可以使用``` Environment.GetCommandLineArgs() ```
  • 我想从在线网站发出命令。而且我的应用不是命令行应用。
【解决方案2】:

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

您可以使用正则表达式。

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

【讨论】:

  • 哇!这个有效。谢谢老哥!
【解决方案3】:

您可以使用 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];
}

这个粗体代码匹配并分割一个空格,当它是双引号时,它会这样。 如果您发现任何问题,请回帖。

谢谢 阿伦

【讨论】:

  • @"[^\\s\"']+|\"([^\"]*)\""; 不是一个可编译的字符串.. 如果你的意思是"[^\\s\"']+|\"([^\"]*)\"" 它不起作用......
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 2015-12-09
  • 1970-01-01
  • 2022-09-28
  • 2015-01-21
  • 2012-03-18
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多