[英]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.9
和4.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.