[英]C# Regex sorting letter and number strings
我有一個需要訂購的清單說:
R1-1
R1-11
R2-2
R1-2
這需要訂購:
R1-1
R1-2
R1-11
R2-2
當前,我正在使用C#Regex.Replace方法,並在字符串末尾的單個數字出現之前添加0,如下所示:
Regex.Replace(inString,@"([1-9]$)", @"0$2")
我敢肯定,有一種更好的方法,我只是想不通。 有沒有人用正則表達式對字母和數字字符串進行排序的好方法?
我在下面使用了Greg的方法來完成此操作,只是認為我應該添加我正在使用的代碼以確保完整性:
public static List<Rack> GetRacks(Guid aisleGUID)
{
log.Debug("Getting Racks with aisleId " + aisleGUID);
List<Rack> result = dataContext.Racks.Where(
r => r.aisleGUID == aisleGUID).ToList();
return result.OrderBy(r => r.rackName, new NaturalStringComparer()).ToList();
}
我認為您追求的是自然排序順序,就像Windows資源管理器一樣? 如果是這樣的話,那么我不久前寫了一篇博客文章,展示了如何在幾行C#中實現這一目標 。
注意:我剛剛檢查了NaturalStringComparer
,在鏈接條目中使用NaturalStringComparer
確實會返回示例字符串所要查找的順序。
您可以編寫自己的比較器,並使用正則表達式先比較“ R”和“-”之間的數字,然后比較“-”之后的數字(如果前兩個數字相等)。
草圖:
public int Compare(string x, string y)
{
int releaseX = ...;
int releaseY = ...;
int revisionX = ...;
int revisionY = ...;
if (releaseX == releaseY)
{
return revisionX - revisionY;
}
else
{
return releaseX - releaseY;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.