从绳子中取出日期

本文关键字:日期 | 更新日期: 2023-09-27 18:05:37

我的问题如下:

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

  1. dd/mm/yyyy
  2. dd/mm/yy
  3. mm/yy
  4. d/m/yy
  5. yyyy
  6. yy

是否有一种方法来搜索字符串中适合该模式的数字?

此外,如果我能检查dd是否在1到31之间(包括1到31)就好了,但如果我必须在之后做这件事,那就没有那么糟糕了。

从绳子中取出日期

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

以下是每个

的正则表达式:
  • 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
  • yy ==> '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。你可能想要考虑它,而不是固定一个精确的集合。