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

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

我确信有更好的方法可以做到这一点,但我只是想不出来。 有没有人有使用正则表达式对字母和数字字符串进行排序的好方法?


我使用了下面 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 资源管理器一样?如果是这样,那么我不久前写了一篇博客文章显示 how you can achieve this in a few lines of C# .

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

关于C# 正则表达式排序字母和数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680692/

相关文章:

regex - R regmatches() 和 stringr str_extract() 拖动空格

c# - 使字段只能由其相应的属性访问?

regex - Bash 用变量替换字符串中的第 N 个单词

c# - 将整数增加到 65535 的最佳线程安全方法

c# - 如何防止 HttpWebRequest 因 Azure Web App 超时而响应过长

c++ - 正则表达式不显示 IPv6 匹配的正确结果

带有多个分隔符和表达式的javascript分割字符串

ruby - 如何测试字符串是否包含 ruby​​ 中的两个或多个元音?

c# - WeakReference 做一个好的缓存吗?

c# - 将 httpwebresponse 写入文件——powershell——简短而甜美(管道)