在字符串中获取年份的最简单方法是什么?



在下面的例子中,我想获得字符串"2023"。我为此编写的所有代码如下。我想要得到字符串"2023"应该不难像这样。得到"2023"最简单的方法是什么?在给定的字符串中?

const string raw = @"TAAD, Türkiye Adalet Akademisi'nin 95. Kuruluş Yıl Dönümü Armağanı, y.78, S.179, Temmuz 2023, s.108-157";
var frst = raw.Split(',').FirstOrDefault(x => x.Any(char.IsDigit) && Convert.ToInt32(new string(x.Where(char.IsDigit).Take(4).ToArray())) > 2000);
var scnd = new string(frst?.Where(char.IsDigit).Take(4).ToArray());
if (scnd.Length > 0 && Convert.ToInt32(scnd) > 2000) MessageBox.Show(scnd);

尝试正则表达式:

var pattern = @"b(d{4})b";
foreach (var match in Regex.Matches(raw, pattern))
{
// do something with match
}

如果要匹配大于2000的4位数字,可以使用:

b[2-9][0-9]{3}b(?<!2000)

在部分中,模式匹配:

  • b防止部分匹配的字边界
  • [2-9]匹配数字2-9
  • [0-9]{3}匹配3位数字0-9
  • bA字边界
  • (?<!2000)负向后看,断言不是2000直接到左边

Regex演示

请注意,在c#中使用d也可以匹配其他语言中的数字。

最新更新