我希望清理作为图像标题的字符串。我想删除不相关的数字,但保留日期序列,例如(即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+");
但我不确定如何保护其他人。
答案 0 :(得分:1)
老实说,我绝不会用正则表达式来做这件事,它会变得难以理解,并且会被错误所造成。
相反,我会逐行接受输入,将其标记化,并提供必要的逻辑作为小型,自包含,可测试的单位(规则)。
然后,您可以在“规则”中以更有限的方式使用正则表达式。 - 例如正则表达式:
[A-Z]+(19|20)\d{2}
将匹配NZ1982
但不匹配NZ1253
。
你的规则需要变得相当复杂,12th
的匹配需要期待下一个令牌,如果它找到看起来像是月份名称的东西,再看一遍,如果它找到下一个令牌看起来像一年然后执行一些逻辑。
如果您可以准确定义每个规则,则每个规则的代码都非常易于管理。