首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以不同字符串的形式从XML中提取带有空格的文件路径和参数

以不同字符串的形式从XML中提取带有空格的文件路径和参数
EN

Stack Overflow用户
提问于 2018-12-12 10:38:44
回答 3查看 70关注 0票数 0

我有一个XML文件,其中包含从我的exe启动应用程序的一些信息。比如:

代码语言:javascript
复制
<details>
    C:\Program Files\...\abc.exe -env env -direnv direnv
</details>

我需要拆分作为路径的第一部分的exe和剩下的作为参数。但是当我分裂到太空时,我只得到了C:\Program。是否有另一种解决方案可以使输出达到以下目的:

string =C:\ProgramFiles...\abc.exe string1 = -env env -direnv 戴伦夫

编辑从XML中提取的代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<Path>
  <details>
    C:\Program Files\...\abc.exe -env env -direnv direnv
  </details>
</Path>

分裂:

代码语言:javascript
复制
string[] configs = installPath.Trim().Split(' ');
exePath = configs[0];
exeArgs = installPath.Remove(0, installPath.IndexOf(' ') + 1);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-12 11:00:36

您可能会在正向后向和正向前瞻中分割,断言左边的是.exe,后面是空格,右边是破折号,后面跟着1+非空格字符:

(?<=\.exe) (?=-\S+)

Regex演示

代码语言:javascript
复制
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#演示

票数 0
EN

Stack Overflow用户

发布于 2018-12-12 10:54:42

可用于解析字符串的类的示例:

代码语言:javascript
复制
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;
    }
}

使用样本:

代码语言:javascript
复制
string path = @"C:\Program Files\...\abc.exe -env env -direnv direnv";
ArgumentPathResult result = ArgumentPathParser.ParsePath(path);

结果对象将包含路径作为一个变量,以及参数和值对的列表( "env env""direnv direnv" )。

票数 0
EN

Stack Overflow用户

发布于 2018-12-12 11:05:32

代码语言:javascript
复制
var splitted = pathNode.InnerText.Trim()
    .Split(new string[] { ".exe " }, StringSplitOptions.None);

var path = splitted[0] + ".exe";
var args = splitted[1];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53741155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档