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]; } |
这个粗体代码带有匹配和分隔空格,当它是双引号时,它将采用同样的方式。如果发现任何问题,请发回。
谢谢阿伦