gpt4 book ai didi

c# - 从任何应用程序调用默认命令行解析方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:27 25 4
gpt4 key购买 nike

我将一个复杂的字符串作为参数传递给我的控制台应用程序。我注意到在我的 Main 方法中生成的 string[] args 数组是我希望将该字符串解析为的内容。

现在,我希望能够解析这种格式的字符串,并在我的框架的其他部分(我的控制台应用程序/进程之外)获得相同的 string[] em> 也不想重新发明轮子。我试图查看是否可以找到并调用用于解析传递给 Main 方法但找不到任何命令行参数的框架方法。我阅读了一些命令行解析选项,包括 NDesk,但在我目前的情况下无法使用它。

有人知道这个框架方法吗?或者还有其他想法吗?

最佳答案

使用正则表达式:

string input = "this is \"a string\" separated by spaces \"with quotes\" also";
Regex r = new Regex("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
var matches = r.Matches(input);

图一个解释会很好:

[^\\s\"']+ 匹配 1+ 个字符,最多一个空格或一个双引号

| 或者

\"([^\"]*)\" 匹配双引号内不是双引号本身的 0+ 个字符

| 或者

'([^']*)' 匹配不是单引号本身的单引号内的 0+ 个字符

此外,我对 .net Regex 不是很好,但据我所知,它们在匹配组时很奇怪。为了让我得到没有引号的字符串,我不得不做这个奇怪的循环:

 var matches = r.Matches(input);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}

如果您在 Windows 上运行,您可以进行 API 调用(过去的 vista 支持它,不管 pinvoke.net 怎么说)。显然这不是跨平台的。

[DllImport("shell32.dll", SetLastError = true)]
static extern IntPtr CommandLineToArgvW(
[MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine,
out int pNumArgs);

示例代码 here

关于c# - 从任何应用程序调用默认命令行解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com