簡體   English   中英

正則表達式在數字上的用法

[英]usage of regular expression on numbers

用戶輸入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.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#中使用正則表達式,但不適合所有測試用例。 任何想法如何實現此邏輯或任何可用的內置功能?

如果我正確理解您的要求,則可以通過以下方式編寫它。 假設您有一些版本 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);
}

在這里,我們只是省略較低的版本,而取單個版本(如果未指定+ )或全部取而代之(如果指定了+ )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM