如何从文字中获取正确的日期?

时间:2015-09-30 13:39:45

标签: c# regex

我必须从文本文件中找到所有日期,文本应该是 dd mm mm dd 的形式(即1月10日或1月10日)我写过这种类型的正则表达式(\d{2} January)。它只给了1月10日,但我想写
1。一个正则表达式,这样我就可以获得两种日期格式(我有一个选项,我可以写这样的(\d{2} January)|(January \d{2})。)
2。一个有效的日期编号(即,我的正则表达式返回true,如果我的文本中有99月份,但它无效)。 应该匹配的案例

  • 1 Januar y
  • 1月2日
  • 1月29日
  • 1月32日
  • 2004年1月
  • 2004年1月
  • 1月32日
  • 1月29日
  • 1月1日
  • 1月1日

如果有效匹配则以粗体显示,其他无效。

2 个答案:

答案 0 :(得分:3)

此模式只需要一次月份名称:

\b((?<day>[0-2]?\d|3[01]) )?January(?(day)| ([0-2]?\d|3[01]))\b

DEMO

但它匹配从0到31的天数。日期模式是:

  • 0-31:[0-2]?\ d | 3 [01]
  • 0-30:[0-2]?\ d | 30
  • 0-29:[0-2]?\ d
  • 0-28:[01]?\ d | 2 [0-8]

答案 1 :(得分:0)

这似乎有效:

string pattern = "(([0-2][0-9]|3[0-1]) January)|(January ([0-2][0-9]|3[0-1]))";

当然它只适用于1月份。