删除C#中字符串中的所有数字,但特定日期序列除外

时间:2014-12-01 11:57:53

标签: c# string

我希望清理作为图像标题的字符串。我想删除不相关的数字,但保留日期序列,例如(即1923年或2010年)或相关日期(即20/10/2012或6月12日)。

例如,我在这里使用括号来表示我想删除的内容:

  

中央车站1929 [12l89]

     

[NZ1253] Bessie Pit Drift Mine

     

Path Head 2012年6月12日

     

[4722] Greenfield 20/10/2012

在上面的示例中,4722不会被视为有效年份,日期范围从1900年到现在,所以说从19--或20--开头,并且有两个正在进行的数字。

我了解如何使用Regex删除所有数字,如下所示:

 System.Text.RegularExpressions.Regex trimmer = new System.Text.RegularExpressions.Regex(@"\s\s+");

但我不确定如何保护其他人。

1 个答案:

答案 0 :(得分:1)

老实说,我绝不会用正则表达式来做这件事,它会变得难以理解,并且会被错误所造成。

相反,我会逐行接受输入,将其标记化,并提供必要的逻辑作为小型,自包含,可测试的单位(规则)。

然后,您可以在“规则”中以更有限的方式使用正则表达式。 - 例如正则表达式:

[A-Z]+(19|20)\d{2}

将匹配NZ1982但不匹配NZ1253

你的规则需要变得相当复杂,12th的匹配需要期待下一个令牌,如果它找到看起来像是月份名称的东西,再看一遍,如果它找到下一个令牌看起来像一年然后执行一些逻辑。

如果您可以准确定义每个规则,则每个规则的代码都非常易于管理。