从字符串中提取日期

soa*_*dos 3 c# string pattern-matching

我的问题如下:

我有一个包含日期和其他数据的字符串数组.我的日期将采用以下几种格式之一:

  1. 日/月/年
  2. DD/MM/YY
  3. MM/YY
  4. d/M /日
  5. YYYY
  6. YY

有没有办法在字符串中搜索符合该字符串的数字?

另外,如果我可以检查dd是否介于1和31之间等等,那将是很好的,但如果我之后必须这样做,那就不会那么糟糕了.

Ray*_*oal 8

每个都对应一个正则表达式.

以下是每个的正则表达式:

  • dd/mm/yyyy ==> \b(?:[012][1-9]|3[01])/(?:0[1-9]|1[012])/\d{4}\b
  • dd/mm/yy ==> \b(?:[012][1-9]|3[01])/(?:0[1-9]|1[012])/\d{2}\b
  • mm/yy ==> \b(?:0[1-9]|1[012])/\d\d\b
  • d/m/yy ==> \b[1-9]/[1-9]/\d\d\b
  • yyyy ==> \b\d{4}\b
  • 是的==> \b\d\d\b

当然,您可以通过不同方式将它们组合在一起.你甚至可以制作一个超级正则表达式.

不过,最后一个是相当有趣的.我可以想象一个案例,你的文本中可能有一个普通的旧数字,就像42那个实际上可能与一年不对应.我猜你仍然可以对其进行后处理.

快乐的复兴.

附录

在评论中回答一些问题:

  1. 是的,它在字符串的开头和结尾处起作用,因为它\b是一个单词边界,包括从单词字符(字母,数字和下划线)到非单词字符的所有过渡,反之亦然,包括字的开头和结尾.字符串.

  2. 要查看测试,请参见此处:http://jsfiddle.net/wRufK/.是的我知道这是用JavaScript而不是C#,但是jsfiddle是一种非常方便的方式来显示代码.但是有一些区别 - 在C#中我们使用Regex.match和JavaScript正则表达式有额外的反斜杠来逃避内部正斜杠.

  3. indexOf 根据应用程序可能有点矫枉过正.如果要查找所有匹配项,请参阅http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx以获取有关重复匹配的信息.您还可以修改正则表达式以进行捕获.

  4. 由于您的日期可以是上述任何一种形式,也可能是其他形式,因此单个正则表达式可能更为可取.这里有一个非常灵活的日期查找器:http://www.regular-expressions.info/dates.html.您可能需要考虑它而不是修复精确集.