c#通过中间的正则表达式对字符串进行排序

时间:2018-07-14 06:28:09

标签: c# sql-order-by

我有一个文章列表程序。这是一个结构示例:

id      text
--      -----
1       AÜSBFD, Prof. Dr. Hıfzı Veldet Velidedeoğlu'na Armağan Sayısı, C.20, S.4, y.1968, s.27-49.
2       AÜSBFD, C.21, S.2, y.1946, Prof. Dr. Türkan Rado'ya Armağan Sayısı, s.1238-1278.
3       AÜSBFD, C.22, S.2, y.1974, s1-49.
4       AÜSBFD, C.22, Prof. Dr. Hüseyin Cahit Oğuzoğlu'na Armağan, S.3, y.1997, s.87-109.
5       AÜSBFD, C.23, S.1, y.2018, Prof. Dr. Aydın ZEVKLİLER'e Armağan, s.547-610.

对于列表问题,我正在使用:

private readonly LtoSQLiteDataContext _con = new LtoSQLiteDataContext();
var issues = _con.issues.OrderBy(x => x.id);

foreach (var i in issues)
{
    MessageBox.Show(i.text);
}

它返回如下: enter image description here

但是我想按标记为黄色的年份对这些字符串进行排序。但是我不知道。

1 个答案:

答案 0 :(得分:1)

OrderBy中,您需要传入一个将数据模型对象转换为Text属性中包含的年份的函数。

让我们写一个这样的方法:

private static int GetYearFromText(YourModelType model) {
    var match = Regex.Match(model.Text, @"y\.(\d{4})");
    var numberString = match.Groups[1].Value;
    return Convert.ToInt32(numberString);
}

请注意,使用的正则表达式是这样:

y\.(\d{4})

字母y后跟一个点,然后是一个包含4位数字的捕获组。

然后您可以将其传递给OrderBy

.OrderBy(GetYearFromText)

请注意,如果字符串与正则表达式不匹配,则会崩溃,因此请确保它们都使用了一年。