如何从字符串中提取名称和版本

链轮12

我有很多文件名,例如:

libgcc1-5.2.0-r0.70413e92.rbt.xar
python3-sqlite3-3.4.3-r1.0.f25d9e76.rbt.xar
u-boot-signed-pad.bin-v2015.10+gitAUTOINC+1b6aee73e6-r0.02df1c57.rbt.xar

我需要从中可靠地提取名称,版本和“ rbt”或“ norbt”。什么是最好的方法?我正在尝试正则表达式,例如:

(?<fileName>.*?)-(?<version>.+).(rbt|norbt).xar

问题是文件名和版本都可以有多个分号。所以我不确定我是否有两个问题的答案:

  1. 提取诸如此类的值的最佳策略是什么?
  2. 如何确定哪个版本更大?

预期输出为:

libgcc1, 5.2.0-r0.70413e92, rbt
python3-sqlite3, 3.4.3-r1.0.f25d9e76, rbt
u-boot-signed-pad.bin, v2015.10+gitAUTOINC+1b6aee73e6-r0.02df1c57, rbt
磁控管

这将为您提供所需的功能,而无需使用Regex:

var fileNames = new List<string>(){
    "libgcc1-5.2.0-r0.70413e92.rbt.xar",
    "python3-sqlite3-3.4.3-r1.0.f25d9e76.rbt.xar",
    "u-boot-signed-pad.bin-v2015.10+gitAUTOINC+1b6aee73e6-r0.02df1c57.rbt.xar"
};
foreach(var file in fileNames){
    var spl = file.Split('-');
    string name = string.Join("-",spl.Take(spl.Length-2));
    string versionRbt = string.Join("-",spl.Skip(spl.Length-2));
    string rbtNorbt = versionRbt.IndexOf("norbt") > 0 ? "norbt" : "rbt";
    string version = versionRbt.Replace($".{rbtNorbt}.xar","");
    Console.WriteLine($"name={name};version={version};rbt={rbtNorbt}");
}

输出:

name=libgcc1;version=5.2.0-r0.70413e92;rbt=rbt
name=python3-sqlite3;version=3.4.3-r1.0.f25d9e76;rbt=rbt
name=u-boot-signed-pad.bin;version=v2015.10+gitAUTOINC+1b6aee73e6-r0.02df1c57;rbt=rbt

编辑:

或使用正则表达式:

var m = Regex.Match(file,@"^(?<fileName>.*)-(?<version>.+-.+)\.(rbt|norbt)\.xar$");
string name = m.Groups["fileName"].Value;
string version = m.Groups["version"].Value;
string rbtNorbt = m.Groups[1].Value;

输出将是相同的。两种方法都假定“版本”只有一个-

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章