在数字上使用正则表达式

时间:2014-07-08 06:44:32

标签: c# regex

用户提供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.94.0.10

如果它与4.0.8, 4.0.9, 4.0.10+类似,那么我只需要复制4.0.9

我尝试在c#中使用正则表达式,但并不适用于所有测试用例。知道如何实现这个逻辑或任何内置函数吗?

1 个答案:

答案 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);
}

这里我们只省略较低版本并采用单一版本(如果未指定+)或另外更高版本(如果指定了+)。