c#用“异常分割字符串

Posted

技术标签:

【中文标题】c#用“异常分割字符串【英文标题】:c# split string with " exception [duplicate] 【发布时间】: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

那么我该如何实现呢?

谢谢。

【问题讨论】:

***.com/questions/491595/… 您是否尝试解析传递给控制台应用程序的参数? 【参考方案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\"']+|\"([^\"]*)\"" 它不起作用......

以上是关于c#用“异常分割字符串的主要内容,如果未能解决你的问题,请参考以下文章

用 C# 编写驱动程序

用 C 语言实现内核,用 C# 实现 Shell

c#中winform是用啥语言编写?

用 C# 启动服务

用 C# 解析 XML?

如何从 c++ 项目中调用用 c# 创建的 dll 文件? [复制]