c# 按正则表达式在中间排序字符串
c# Order Strings by Regular Expression In The Middle
我有一个文章列表程序。这是一个结构示例:
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);
}
它returns像这样:
但我想按标记为黄色的年份对这些字符串进行排序。但是我不知道。
在 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)
请注意,如果字符串与正则表达式不匹配,这将崩溃,因此请确保它们都有年份。
我有一个文章列表程序。这是一个结构示例:
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);
}
它returns像这样:
但我想按标记为黄色的年份对这些字符串进行排序。但是我不知道。
在 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)
请注意,如果字符串与正则表达式不匹配,这将崩溃,因此请确保它们都有年份。