用户提供4.0.9
我在4.0.8, 4.0.9, 4.0.10
等文件中有这样的数字列表。在这种情况下,我必须从这三个中选择4.0.9。
但如果文件包含4.0.8, 4.0.9+, 4.0.10
,那么我必须同时复制4.0.9
和4.0.10
。
如果它与4.0.8, 4.0.9, 4.0.10+
类似,那么我只需要复制4.0.9
我尝试在c#中使用正则表达式,但并不适用于所有测试用例。知道如何实现这个逻辑或任何内置函数吗?
答案 0 :(得分:1)
如果我正确理解您的要求,您可以按以下方式编写。假设您有一些list
个版本(未排序),您可以将其解析为帮助程序列表。请注意,我还要对list
中的版本进行排序,以使逻辑更清晰:
string list = "4.0.8, 4.0.9+, 4.0.10";
var versions =
list.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new
{
Version = Version.Parse(s.TrimEnd('+')),
FutureReleases = s.EndsWith("+")
})
.OrderBy(a => a.Version);
然后在匹配某些特定input
:
string input = "4.0.9";
var version = Version.Parse(input);
var output = versions.SkipWhile(a => a.Version < version);
var first = output.FirstOrDefault();
if (first != null && !first.FutureReleases)
{
output = versions.TakeWhile(a => a.Version == version);
}
这里我们只省略较低版本并采用单一版本(如果未指定+
)或另外更高版本(如果指定了+
)。