簡體   English   中英

C#正則表達式對字母和數字字符串進行排序

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

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