Часть 1(Решена). Нужно создать паттерн извлекающий все варианты заведения времени такие как , с(от) чч:мм по(до) чч:мм, или просто чч:мм, или с(от) чч:мм, или по(до) чч:мм В файле анализируемая строка А, результат B, паттерны(С), а в столбце D) желаемый результат по отдельности создать паттерн получается но сделать общий никак. Надеюсь понятно описал. UP темы Часть 2.(Поиск решения) Подскажите как исключить выборку формата чч:мм использую этот паттерн (([0-1]\d|2[0-3])[^\:][0-5]\d)|([0-1]\d|2[0-3][^\:]) на входе строка может быть как ЧЧ [любой разделитель кроме : ] ММ так и только ЧЧ (перевожу его в ЧЧ:00). Надо исключить если приходит правильно заведенное время
Вы посмотрите, что у Вас в столбце D (графа "Нужно получить") По моему получается именно то, что вы там написали Извиняюсь не заметил отсутствия точки с запятой
Спасибо, тоже работает, тестирую, мне еще втыкать ([0-1]\d|2[0-3]):[0-5]\d - т.к. надо брать точно, что это именно время, а не суммарное объем времени типа 156:44.
А ну да точнО! чето я видимо совсем сегодня не соображаю.
в итоге пока получилось как то так (с|от)\s?(([0-1]\d|2[0-3]):[0-5]\d)\s(по|до)\s?(([0-1]\d|2[0-3]):[0-5]\d)|(с|от|по|до)\s?(([0-1]\d|2[0-3]):[0-5]\d)|(([0-1]\d|2[0-3]):[0-5]\d)
Как-то наоборот приводят к правильному написанию времени при различных разделителях типа , / или -
Вы правы, вот как раз я такой случай и рассматриваю, что могут завести различными разделителями, или без разделителя просто указав конкретный час, это мне и требуется получить, если время не корректным разделителем меняем разделитель на корректный :, если завели просто час, добавляю разделитель : и 00. Но если завели время в правильном формате, то мне надо игнорировать такое заведение. Исключить имелось в виду написание в паттерне исключения по корректно заведенных чч:мм, чтобы не попадали в выборку
например : все ниже меняем на 12:00 12 12,00 12*00 12-00 12/00 12+00 но если завели 12:00 то менять ничего не надо и данная запись не должна попасть в выборку.
Цитата
Где критерий, что две цифры относятся к времени, а не к номеру дома?
Тут ничего не поделать, в табеле учета времени должно быть только время. все другое будет нищядно изменяться на времяя
все ниже меняем на 12:00 12 12,00 12*00 12-00 12/00 12+00
Код
Function iTime(cell$)
Dim mo As Object
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "([0-1][0-9]|[2][0-3])([,|/|\-|\.|\*|\+])?([0-5][0-9])?"
If .test(cell) Then
Set mo = .Execute(cell)
If mo.Count = 1 Then
iTime = .Replace(cell, "$1:00")
Else
iTime = .Replace(cell, "$1:$3")
End If
Else
iTime = ""
End If
End With
End Function
Kuzmich, спасибо, я не знал что можно указывать для метода .Replace указатели места замены из шаблона.
Конструкция [^\:] работает. Спасибо.
"К сожалению так и не получилось избавится от корректной записи, все равно обрабатывается и она попадает. В файле приложил сделав новую функцию и паттерн к ней.
Посмотрите пожалуйста, что можно сделать."
Update: кажется нашел решение таким паттерном ([0-1][0-9]|[2][0-3])([^\:])?([0-5][0-9])([^\:])? - не работает если ЧЧ
Может так: ([0-1][0-9]|[2][0-3])([,|/|\-|\.|\*|\+|:])?([0-5][0-9])?
Работает, Спасибо. Но, придется все таки перечислить все знаки разделители. Я исходил из того чтобы взять любое, что похоже на ЧЧ ММ или ЧЧ, и исключить корректно заведенное через ЧЧ:ММ ([^\:])?.