-1

我有如下内容,我只想选择年份信息作为字符串值。

给定这个输入字符串:

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

我想提取19972004.

笔记:

  1. 年份信息仅以四位数字出现
  2. 很可能它以句号(句号)或右括号结束
  3. 它可能出现在段落内的任何地方
4

5 回答 5

1
var years = Regex.Matches(input, @"\D(\d{4})\D")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToArray();
于 2012-04-10T06:06:44.967 回答
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
于 2012-04-10T06:05:19.307 回答
0

你的岁月真的有限吗?意思是,没有什么比 1900 年更早的了?还是1800?这将使您更加精确。

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

MatchCollection years = regex.Matches(your_input);

认为正则表达式将匹配 1900 年代或 2000 年代中的任何日期,这些日期前面有空格,并以 ) 结尾。

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

于 2012-04-10T06:06:58.970 回答
0

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

)这将搜索以or]或结尾的所有 4 位数字.

于 2012-04-10T06:07:25.130 回答
0

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

Match match = Regex.Match(input, "^[12][0-9]{3}$");
于 2012-04-10T06:11:22.347 回答