2010-04-28 2 views
1

Я работаю над приложением C#, и получаю строку с датой или частью даты, и мне нужно получить день, месяц и год для этой строки. Например:Синхронизация дат с регулярным выражением в C#

string example='31-12-2010' 
string day = Regex.Match(example, "REGULAR EXPRESSION FOR DAY").ToString(); 
string month = Regex.Match(example, "REGULAR EXPRESSION FOR MONTH").ToString() 
string year = Regex.Match(example, "REGULAR EXPRESSION FOR YEAR").ToString() 

day = "31" 
month = "12" 
year = "2010" 

ex2: 
string example='12-2010' 

string month = Regex.Match(example, "REGULAR EXPRESSION FOR MONTH").ToString() 
string year = Regex.Match(example, "REGULAR EXPRESSION FOR YEAR").ToString() 

month = "12" 
year = "2010" 

Есть идеи?

ответ

4

Не используйте для этого регулярные выражения. Вместо этого используйте

DateTime temp = DateTime.Parse(example); 

Сейчас много полезных свойств в вашем распоряжении. temp.Day, например.

+0

что не будет работать для меня, потому что моя строка также может быть «2010» или «2010 12:44». это заставит DateTime.parse (str) выдавать исключение – DJPB

+0

Тогда я бы использовал DateTime.TryParse и повторил несколько ожидаемых форматов. –

+0

@ DJPB: Ах, вы не сказали этого в вопросе. =) Затем обновите вопрос, чтобы включить все возможные случаи. – Jens

1

DateTime.ParseExact() позволяет определить пользовательский формат строки, которую вы хотите разбор, а затем у вас есть хороший объект DateTime.
Но если вы скажете, что у вас могут быть странные форматы, такие как «year hour: minute», я думаю, вы можете пойти с RegEx.

string example = "31-12-2010"; 

    Match m = Regex.Match(example, @"^(?<day>\d\d?)-(?<month>\d\d?)-(?<year>\d\d\d\d)$"); 
    string strDay = m.Groups["day"].Value; 
    string strMonth = m.Groups["month"].Value; 
    string strYear = m.Groups["year"].Value; 

Для строки "2010 12:44", вы можете использовать шаблон @"^(?<year>\d\d\d\d) (?<hour>\d\d?):(?<minute>\d\d?)$"

Для строки "12-2010", вы можете использовать шаблон @"^(?<month>\d\d?)-(?<year>\d\d\d\d)$"

Смежные вопросы