我想将一个字符串拆分成几部分,以检索参数。
我已经完成了这个功能:
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
那我怎么能实现呢?
谢谢。
答案 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];
}
这个带有匹配和分割空格的粗体代码,当它是双引号时,它将采用这样的方式。 如果您发现任何问题,请回发。
由于 阿伦