我有英国邮政编码数据,我想按字母顺序排序,当我这样做时,结果如下;正则表达式找到并用找到的值替换
N10-XX
N1-XX
N2-XX
N3-XX
N4-XX
N5-XX
我想要的是如下;
N1-XX
N2-XX
N3-XX
N4-XX
N5-XX
N10-XX
基础我需要在数字的开头加0,如果它是1位数。像N1应该是N01才能做到这一点,这是什么正则表达式模式?
非常感谢。
我有英国邮政编码数据,我想按字母顺序排序,当我这样做时,结果如下;正则表达式找到并用找到的值替换
N10-XX
N1-XX
N2-XX
N3-XX
N4-XX
N5-XX
我想要的是如下;
N1-XX
N2-XX
N3-XX
N4-XX
N5-XX
N10-XX
基础我需要在数字的开头加0,如果它是1位数。像N1应该是N01才能做到这一点,这是什么正则表达式模式?
非常感谢。
那么,如果你正在使用正则表达式的弯曲,那么这应该这样做
var text = @"N10-XX
N1-XX
N2-XX
N3-XX
N4-XX
N5-XX";
text = Regex.Replace(text, @"^N(\d)-", "N0$1-", RegexOptions.Multiline);
是说,你显然会改变原来的数据,所以我不知道这是否是即使适用
如果你想通过数字来排序,但保留原来的数据,那么你可能需要做这样的事情
text.Split('\n')
.Select(o => new { Original = o, Normal = Regex.Replace(o, @"^N(\d)-", "N0$1-", RegexOptions.Compiled)})
.OrderBy(o => o.Normal)
.Select(o => o.Original)
我不是从例如知道哪个后置码号需要订购。这里是有效的英国邮政编码http://blogs.creative-jar.com/post/Valid-UK-Postcdoe-formats.aspx的一些正则表达式示例。如果你使用上面的方法来合并这个,你应该可以做到。
这是一个按自然(?)顺序返回原始字符串的排序函数。
List<string> list1 = new List<string>{ "N10-XX","N1-XX","N2-XX","N3-XX","N4-XX","N5-XX" };
List<string> list2 = new List<string>() { "File (5).txt", "File (1).txt", "File (10).txt", "File (100).txt", "File (2).txt" };
var sortedList1 = MySort(list1).ToArray();
var sortedList2 = MySort(list2).ToArray();
public static IEnumerable<string> MySort(IEnumerable<string> list)
{
int maxLen = list.Select(s => s.Length).Max();
Func<string, char> PaddingChar = s => char.IsDigit(s[0]) ? ' ' : char.MaxValue;
return
list.Select(s =>
new
{
OrgStr = s,
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, PaddingChar(m.Value)))
})
.OrderBy(x => x.SortStr)
.Select(x => x.OrgStr);
}