我有一个XML文件,其中包含从我的exe启动应用程序的一些信息。比如:
<details>
C:\Program Files\...\abc.exe -env env -direnv direnv
</details>我需要拆分作为路径的第一部分的exe和剩下的作为参数。但是当我分裂到太空时,我只得到了C:\Program。是否有另一种解决方案可以使输出达到以下目的:
string =C:\ProgramFiles...\abc.exe string1 = -env env -direnv 戴伦夫
编辑从XML中提取的代码:
XMLNodeLst = GetNodeFromXML().SelectNodes("Path");
if (XMLNodeLst != null)
{
foreach (XmlNode xmlNode in XMLNodeLst)
{
foreach (XmlNode pathNode in xmlNode.ChildNodes)
{
Match m = Regex.Match(source, pathNode.Name, RegexOptions.IgnoreCase);
if (m.Success)
{
installPath = pathNode.InnerText.Trim();
break;
}
else
{
logs.Error("No corresponding value in settings for the provided source name. Please check again!");
MessageBox.Show("No corresponding value in settings for the provided source name. Please check again!");
Environment.Exit(-1);
}
}
}
}XML:
<?xml version="1.0" encoding="utf-8" ?>
<Path>
<details>
C:\Program Files\...\abc.exe -env env -direnv direnv
</details>
</Path>分裂:
string[] configs = installPath.Trim().Split(' ');
exePath = configs[0];
exeArgs = installPath.Remove(0, installPath.IndexOf(' ') + 1);发布于 2018-12-12 11:00:36
您可能会在正向后向和正向前瞻中分割,断言左边的是.exe,后面是空格,右边是破折号,后面跟着1+非空格字符:
(?<=\.exe) (?=-\S+)
var installPath = @"C:\Program Files\...\abc.exe -env env -direnv direnv";
string[] configs = Regex.Split(installPath, @"(?<=\.exe) (?=-\S+)");
var exePath = configs[0];
Console.WriteLine(exePath); // C:\Program Files\...\abc.exe见C#演示
发布于 2018-12-12 10:54:42
可用于解析字符串的类的示例:
public class ArgumentPathResult {
public string Path;
public List<string> Arguments = new List<string>();
}
// Define other methods and classes here
public static class ArgumentPathParser {
public static ArgumentPathResult ParsePath(string path) {
ArgumentPathResult result = new ArgumentPathResult();
string resultString = "";
foreach(char c in path){
resultString += c;
if(resultString.Contains(".exe")){
break;
}
}
result.Path = resultString;
result.Arguments = path.Replace(resultString, "")
.Split('-')
.Skip(1)
.ToList();
return result;
}
}使用样本:
string path = @"C:\Program Files\...\abc.exe -env env -direnv direnv";
ArgumentPathResult result = ArgumentPathParser.ParsePath(path);结果对象将包含路径作为一个变量,以及参数和值对的列表( "env env"和"direnv direnv" )。
发布于 2018-12-12 11:05:32
var splitted = pathNode.InnerText.Trim()
.Split(new string[] { ".exe " }, StringSplitOptions.None);
var path = splitted[0] + ".exe";
var args = splitted[1];https://stackoverflow.com/questions/53741155
复制相似问题