Мне нужно специальное регулярное выражение для шаблона короткой даты математики (и т. Д. «M/dd/yyyy», «dd/mm/yyyy», «yyyy/mm/dd», ... зависит от культуры ..), то я могу получить день, месяц, год, чтобы разобрать этот формат следующим образом:Регулярное выражение для сопоставления короткого шаблона даты в любой культуре
string input = "03/24/2013";
Match m = Regex.Match(input, @"^(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{4})$");
if(m.Success)
{
DateTime d = new DateTime(int.Parse(m.Groups["year"].Value),
int.Parse(m.Groups["month"].Value),
int.Parse(m.Groups["day"].Value));
}
но! это выражение не поддерживает все различные форматы так
требуют:
- Принимать только '/' в качестве разделителей.
- Действителен весь короткий шаблон даты (только дата, также время будет большим) в различных культурах (и т. Д., En-US, th-TH, jp-JP, ...). Возможно ли это, на самом деле мне просто нужно знать, какая часть - год, месяц или день, но я не мог найти ее нигде. Пожалуйста, помогите мне ...
- Действительно общий диапазон: день [1-31] {1-2}, месяц [1-12] {1-2}, год [1600-9999] {4}
Зачем вам нужно регулярное выражение для этого, а не делать это, итерируя через культуры? Имейте в виду, что год «1600» - это не одно и то же в разных культурах, например, вас интересует только * григорианский год? –
Используйте 'DateTime.TryParse', перемещаясь по различным культурам. http://msdn.microsoft.com/en-us/library/9h21f14e.aspx Обратите внимание, однако, что проблема двусмысленности. Строка «03/12/2013» может быть 12 марта или 3 декабря, в зависимости от культуры. –
@JonSkeet, я понятия не имею об этом году, найденном на regexlib.com, просто игнорирую его. во всяком случае, итерируя через культуры umm .. этот интересный вы можете дать мне больше намека (код), спасибо –