Regex для даты проблемы - PullRequest
4 голосов
/ 27 июня 2010

У меня есть строка, например: 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 ]

3 голосов
/ 27 июня 2010

Это $ в конце. Это означает, что после цифр года не должно быть никаких символов - другими словами, RE должно соответствовать всей строке.

Вы, вероятно, хотите это вместо:

^([0-9]{1,2}).([0-9]{1,2}).([0-9]{4,4})
1 голос
/ 27 июня 2010

Возможно, происходит нечто большее, чем то, что вы говорите, или входящая строка может быть более сложной, но почему бы просто не использовать String.Split?Это намного понятнее ИМО.

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

if(parts.Length > 0)
{
  string date = parts[0];
  if(!string.IsNullOrEmpty(date)) //use date
}
0 голосов
/ 27 июня 2010

Проблема в том, что вы указываете, что конец строки ($) должен следовать сразу после года.Если вы удалите это условие, вы сможете получить дату из строки.Также вы отлавливаете компоненты отдельно, поэтому вы не получите дату в виде одной строки.Кроме того, вам нужно избегать периодов, если вы хотите, чтобы они соответствовали только периодам, иначе они будут соответствовать любому символу:

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

или просто:

^(\d{1,2}\.\d{1,2}\.\d{4})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...