Как разрешить символы в определенном месте в строке - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь разобрать дату.Проблема в том, что мое регулярное выражение пропускает любые буквы, потому что я хочу избежать 01-28-2019 UTC или любых букв за пределами основной даты.Теперь он отлично работает, когда дата отформатирована так, как я только что перечислил, однако не получается, когда мы получаем дату, отформатированную как 28-JAN-19.

var sourceValue = Regex.Replace("28-JAN-19", @"[A-Za-z]", "");
var parsed = DateTime.Parse(sourceValue);

Дата, которую мне нужно проанализировать, может быть в нескольких разныхформаты.Можно ли использовать регулярное выражение для обработки этого?Если да, то какие настройки нужны для обрезки любых букв за пределами xx-xx-xx части строки?

28-JAN-19 28-01-19 28-JAN-19 13:15:00 28-01-19 13:15:00 28-01-2019 13:15:00

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Этот RegEx должен соответствовать всем предоставленным вами примерам:

[0-9]{2}-([A-Za-z]{3}|[0-9]{2})-[0-9]{2,4}( [0-9][0-9]?:[0-9][0-9]?:[0-9][0-9])?

Тем не менее, он делает пару предположений, основываясь на ваших примерах. Во-первых, предполагается, что все ваши даты всегда будут начинаться с двухзначного дня. Это также предполагает, что ваши сокращения месяца будут состоять из 3 букв. Также предполагается, что ваши часы, минуты и секунды будут состоять из 2 цифр. Дайте мне знать, если какое-либо из этих предположений неверно.

Вот скрипка

0 голосов
/ 23 января 2019

Регулярные выражения, вероятно, не лучшая ставка. Если вы знаете полный набор форматов, с которыми вы можете столкнуться, вы можете использовать обычный DateTime.ParseExact со строкой формата. Проверьте FormatException, чтобы узнать, успешно ли вы проанализировали дату. Если в ваших месяцах используются английские аббревиатуры, обязательно переходите на английский язык

DateTime.ParseExact("28-JAN-19", "dd-MMM-yy", new CultureInfo("en"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...