我有一个需要订购的清单说:
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();
}
答案 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;
}
}