正则表达式日期问题

时间:2010-06-27 19:34:39

标签: c# regex

我有字符串例如:06.07.2010 (tor.)

我想使用正则表达式仅提取06.07.2010,但以下操作无效:

^([0-9]{1,2}).([0-9]{1,2}).([0-9]{4,4})$
^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.]([1-9]|0[1-9]|1[012])[- /.][0-9]{4}$

有人可以告诉我这里有什么问题吗?

3 个答案:

答案 0 :(得分:3)

最后是$。这意味着年份数字后面不能有任何字符 - 换句话说,RE必须匹配整个字符串。

你可能想要这个:

^([0-9]{1,2}).([0-9]{1,2}).([0-9]{4,4})

答案 1 :(得分:1)

也许还有比你说的更多或传入的字符串可能更复杂,但为什么不使用String.Split? IMO更加清晰。

string dateAndStuff = "06.07.2010 (tor)";
string[] parts = dateAndStuff.Split(' ');

if(parts.Length > 0)
{
  string date = parts[0];
  if(!string.IsNullOrEmpty(date)) //use date
}

答案 2 :(得分:0)

问题是你指定字符串($)的结尾应该在一年之后立即跟随。如果删除该条件,您将能够从字符串中获取日期。您还要单独捕获组件,因此您不会将日期作为单个字符串。此外,如果您希望它们仅匹配句点,则需要转义句点,否则它们将匹配任何字符:

^([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4,4})

或简单地说:

^(\d{1,2}\.\d{1,2}\.\d{4})