【发布时间】:2019-08-22 20:01:03
【问题描述】:
我有很多文件名,例如:
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
问题是文件名和版本都可以有多个分号。所以我不确定我有两个问题是否有答案:
- 提取此类值的最佳策略是什么?
- 如何确定哪个版本更高?
预期输出是:
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
【问题讨论】:
-
在
.+版本中,我认为您还需要一个?以使其不贪婪 -
这 3 个示例的预期输出是什么?
-
第三个文件名中的“10+gitAUTOINC+”表示“版本”部分的可变性太大。为了可靠地提取想要的信息,您需要对文件名的格式进行一些保证。有吗?
标签: c# regex parsing comparison version