首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#正则表达式排序字母和数字字符串

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

Stack Overflow用户
提问于 2009-03-25 08:35:25
回答 2查看 2.9K关注 0票数 1

我有一份需要订购的清单,比如:

代码语言:javascript
复制
R1-1
R1-11
R2-2
R1-2

这需要订购:

代码语言:javascript
复制
R1-1
R1-2
R1-11
R2-2

目前,我正在使用C# Regex.Replace方法,并在字符串末尾的单个数字出现之前添加0,如下所示:

代码语言:javascript
复制
Regex.Replace(inString,@"([1-9]$)", @"0$2")

我相信有更好的方法来做这件事,但我就是想不出。有谁有一种用正则表达式对字母和数字字符串进行排序的好方法?

下面我使用了Greg的方法来完成这个任务,我只是觉得我应该添加我所使用的代码以保证完整性:

代码语言:javascript
复制
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();
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-25 08:39:28

我认为你所追求的是自然排序顺序,就像Windows资源管理器一样?如果是这样的话,我写了一段时间后的博客条目显示如何在几行C#中实现这一点?

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

票数 4
EN

Stack Overflow用户

发布于 2009-03-25 08:48:39

您可以编写自己的比较器,并使用正则表达式来比较"R“和"-”之间的数字,如果第一个数字相等,则后面的数字是"-“。

素描:

代码语言:javascript
复制
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;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/680692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档