C#正则表达式排序字母和数字字符串

时间:2009-03-25 08:35:26

标签: c# regex

我有一个需要订购的清单说:

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")

我确信有一种更好的方法可以做到这一点,我无法弄明白。 有没有人用regex排序字母和数字字符串?


我使用下面的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();
    }

2 个答案:

答案 0 :(得分:4)

我认为您所追求的是自然排序顺序,就像Windows资源管理器一样?如果是这样,那么我在前一段时间写了一篇博客文章how you can achieve this in a few lines of C#

注意:我刚刚检查并使用链接条目中的NaturalStringComparer确实返回了您要查找的示例字符串的顺序。

答案 1 :(得分:2)

如果第一个数字相等,您可以编写自己的比较器并使用正则表达式首先比较“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;
    }
}