如何将年份信息作为字符串值?

时间:2012-04-10 05:59:10

标签: c#

我有一个类似下面的内容,我想只选择年份信息作为字符串值。

给定此输入字符串:

  

例如,主要问题之一是观察者动态   假设比状态反馈控制器快,   这会导致数值上的困难(Astrom和Wittenmark,1997)。   更重要的是,当激活流程约束时,   闭环控制性能将明显恶化   明显地看到,非线性主导着控制   系统(Tenny,Rawlings和Wright,2004)。因此,这是必要的   开发能够解决上述问题的方法。

我想提取19972004

注意:

  1. 年份信息仅以四位数字显示
  2. 最有可能以完全停止(句号)或关闭括号
  3. 结束
  4. 可能发生在段落内的任何地方

5 个答案:

答案 0 :(得分:1)

var years = Regex.Matches(input, @"\D(\d{4})\D")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToArray();

答案 1 :(得分:0)

好吧,我建议您使用以下正则表达式。

 ((19|20)\d{2})

 \b((19|20)\d{2})\b

在.NET中,还支持命名组,因此以下也是匹配模式的便捷方式。

\b(?<Years>(19|20)\d{2})\b

注意:此正则表达式搜索四位数,前两位必须为1920。 如果可以在早些年可以包括它们

\b(?<Years>(17|18|19|20)\d{2})\b

答案 2 :(得分:0)

你的年龄有限吗?意思是,没有比1900年更早的了?还是1800?这会让你更精确一些。

Regex regex = new Regex(@" (19|20)\d\d\))") 

MatchCollection years = regex.Matches(your_input);

认为正则表达式将匹配20世纪或2000年代的任何日期,它们具有前面的空格,并以a结尾。

然后,您可以遍历MatchCollection,获取匹配的所有实例。

答案 3 :(得分:0)

试试这个\d\d\d\d[\)\]\.]正则表达式。

这会搜索以)].结尾的所有4位数字。

答案 4 :(得分:0)

您可以使用正则表达式。像^[12][0-9]{3}$之类的东西会验证您的年份。

Match match = Regex.Match(input, "^[12][0-9]{3}$");