Имя: Пароль:
1C
1С v8
Подскажите по регулярным выражениям
0 twise
 
18.09.13
16:00
Всем, привет.
Нужна помощь по регулярным выражениям.
В строке поиска может содержаться 2 даты или одна дата. Если их содержится две, то одна имеет формат "дд.мм.гггг", а другая "дд.мм.гггг чч:мм:сс". Если одна, то она формата "дд.мм.гггг".
Задача следующая. Если есть дата со временем, то выбираем ее, а если нет, то тогда ту, что есть.

Написал строку:
\d{2}[./]\d{2}[./]\d{4}\s\d{2}:\d{2}:\d{2}|\d{2}.\d{2}.\d{4}

В принципе, работает корректно, но в случае строки с двумя датами Execute возвращает 2 записи, а нужна одна с вышеуказанным приоритетом.
1 pumbaEO
 
18.09.13
16:02
x|y - находит x или y...
2 twise
 
18.09.13
16:03
(1) а как только одно значение выбрать?
3 twise
 
18.09.13
16:04
я и использую "|"
4 pumbaEO
 
18.09.13
16:05
значит бери всегда первое не ошибешся.
5 twise
 
18.09.13
16:06
(4) так как раз наоборот, у меня та, что без времени, всегда первым идет. А вот вторая дата (со временем) она либо идет после, либо ее там нет.
6 twise
 
18.09.13
16:06
Только постобработкой результата решить?
7 pumbaEO
 
18.09.13
16:08
не верю что у тебя идет одной строкой "22.12.201322.12.2013 13:15:10" , может для времени проверять еще и пробел?
8 Fragster
 
модератор
18.09.13
16:10
((?=\d{2}.\d{2}.\d{4}\s)\d{2}[./]\d{2}[./]\d{4}\s\d{2}:\d{2}:\d{2})|(\d{2}.\d{2}.\d{4})
9 Fragster
 
модератор
18.09.13
16:10
но все равно два результата, ибо "или"
10 twise
 
18.09.13
16:12
(7) вот строка для примера. Это загрузка из интернет-банка.

10.09.2013 - 3 039,00 RUR Сформирован при обработке транзакции (регистрационный номер документа 56582214 по карте 520339XXXXXX9434). Дата совершения операции 07/09/2013 18:53:11. Тип операции Эмиссия. Оплата товаров/услуг. Сумма операции/валюта операции 3039.00/RUR.  

Первая дата (10.09.2013) - это дата, когда операция была подтверждена банком, а внутри описания транзакции есть реальная дата (07/09/2013 18:53:11).
11 twise
 
18.09.13
16:12
Хочется брать именно реальную
12 twise
 
18.09.13
16:12
Но ее там может не быть
13 twise
 
18.09.13
16:13
(8) да, те же яйца, только в профиль (((
14 pumbaEO
 
18.09.13
16:13
первую дату сначала 1 пробел и потом ищем дату.
15 twise
 
18.09.13
16:16
(14) не очень понял
16 twise
 
18.09.13
16:21
(14) \s\d{2}[./]\d{2}[./]\d{4}\s\d{2}:\d{2}:\d{2}|\d{2}.\d{2}.\d{4}

Так что ли? Все равно же 2 возвращает и не в таком порядке, каком мне надо (
17 Fragster
 
модератор
18.09.13
16:23
если (?=\d{2}.\d{2}.\d{4}.*)\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}:\d{2}|\d{2}.\d{2}.\d{4} возвращает два результата - бери второй, если один - бери первый
18 twise
 
18.09.13
16:24
(17) ну это я догадался. Но это уже постобработка регулярки. Так можно конечно, но хотелось бы решить самой регуляркой.
19 twise
 
18.09.13
16:38
Ок, а как тогда получить строку такого вида:
10.09.201307/09/2013 18:53:11 ?
20 twise
 
18.09.13
16:50
Смирился и решил проблему постобработкой. Всем спасибо за участие.