powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
6 сообщений из 6, страница 1 из 1
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38372552
LINQStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Изначально мне нужно проверять строки, на соответствие формату даты. Формат даты должен быть таким "yyyy-mm-yy HH:MM:ss".
С этим проблем нет. Все ок.

Вот регэксп
string pattern = @"^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])( \d{1,2}[:-](\d{2}))$";

(взял и немного допилил отсюда: http://gskinner.com/RegExr/?31p85)

Как вы видите из формулы, разделители могут быть разные
Код: c#
1.
2.
"2001-02/01 10:10-10" 
"2004/34\34 10-10-20"



Вопрос у меня такой.
Мне нужно чтобы регэксп вернул строку строго формата "2001-02-01 10:10". Чтобы я мог спокойно вызвать
Код: c#
1.
DateTime.TryParseExact (..."yyyy-MM-dd HH:mm:ss"...)



мне нужно в первой половине формулы все разделители заменить на "-", а во второй половине на ":".

Подскажите пожалуйста как это можно сделать ?
...
Рейтинг: 0 / 0
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38372574
LINQStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока сделал так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            //string Pattern = @"^(\d{4})[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])( (\d{1,2})[:-](\d{2}))$";    

            if (match.Success)
            {
                var Gr = match.Groups;
                string ssss = string.Format ("Склеил: {0}-{1}-{2} {3}:{4}",Gr[1], Gr[2], Gr[3], Gr[5], Gr[6]);

                Console.WriteLine (ssss);
            }


Склеил: 2013-01-20 10:22





Т.е. создал группы в паттерне, и явно выдернул их из матча.

Работает. Но может есть решение по элегантней ? Наверняка можно заставить регэксп все это сделать, и мне бы хотело узнать как - может пригодится еще.
...
Рейтинг: 0 / 0
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38373200
LINQStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть идеи ?
...
Рейтинг: 0 / 0
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38373592
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
string str = "2001-02/01 10:10-10";

str = Regex.Replace(str, @"(\d{4}).(\d\d).(\d\d \d\d).(\d\d).(\d\d)",
	(Match m) => (m.Groups[1].Value + '-' + m.Groups[2].Value + '-' +
		m.Groups[3].Value + ':' + m.Groups[4].Value + ':' + m.Groups[5].Value));
...
Рейтинг: 0 / 0
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38373635
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё вариант, совсем короткий:
Код: c#
1.
2.
3.
4.
string str = @"2001\02/01 10:10-10";

int n = 0;
str = Regex.Replace(str, @"\D+", (Match m) => "-- ::".Substring(n++, 1));
...
Рейтинг: 0 / 0
Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
    #38373659
LINQStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яростный Меч,

Хм.. Да... Блин прикольно.
У вас очень простой паттерн вышел. Я использовал навороченный, учитывающий, что месяцев не может быть больше 12, а чисел 31, и что лидирующий ноль в начале числа не обязателен но может и присутствовать.

Но в целом, вы пожалуй больше правы.
В паттерне и не нужна эта проверка. Ибо потом строка будет конвертиться в датувремя, и там уже и будет проверка на корректность. А на данном этапе важно лишь привести строку к нужному формату.

Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Нужно поделить строку на 2 части, и сделать Replace по 2м разным правилам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]