Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式在数字上的用法_C#_Regex - Fatal编程技术网

C# 正则表达式在数字上的用法

C# 正则表达式在数字上的用法,c#,regex,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.9和4.0.10 另外,如果它有4.0.8、4.0.9、4.0.10+,那么我只需要复制4.0.9 我尝试用c语言编写正则表达式,但并不适合所有测试用例。您知道如何实现此逻辑或任何可用的内置功能吗?如果我正确理解您的需求,您可以用以下方式编写。假设您有一些未排序的版

用户提供类似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语言编写正则表达式,但并不适合所有测试用例。您知道如何实现此逻辑或任何可用的内置功能吗?

如果我正确理解您的需求,您可以用以下方式编写。假设您有一些未排序的版本列表,您可以将其解析为帮助器列表。请注意,我正在对列表中的版本进行额外排序,以使逻辑更清晰:

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);
然后,在匹配某些特定输入时,只需对其进行迭代:


这里我们只是省略了较低版本,如果未指定+,则采用单一版本;如果指定了+,则采用所有较高版本。

没有可用的内部函数。编写您自己的逻辑-如果版本包括将来的版本,请将其与信息一起解析到版本列表中,并在与特定数字匹配时使用此列表。您的值是否始终按顺序排列?如果是这样的话,您只需按进行拆分,然后遍历这些值。如果搜索值包含+,则在数组中获取以下项(如果存在)。您尝试使用正则表达式。。。你试了什么?显示您的代码如果文件包含4.0.8、4.0.9+、4.0.10+、4.0.11怎么办?@Gonzix:这些值将不符合顺序。这段代码的输出是4.0.9,但结果应该是4.0.9和4.0。10@SatheeshKurunthiah,我已根据您的评论编辑了我的答案。
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);
}