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

Я хотел бы проверить, является ли какая-либо строка действительным часовым диапазоном (% H% M-% H% M формат), например:

12:00-13:00  # that is valid

Я пробовал:

try:
    time.strptime('12:00-13:00','%H:%M-%H:%M')
    return True
except ValueError:
    return False

но возникает ошибка регулярного выражения:

error: redefinition of group name 'H' as group 3; was group 1 at position 47

Не могли бы вы указать мне способ ее решения?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы можете разбить строку на -, а затем проверить, равно ли количество элементов в результирующем списке 2.Если это так, проанализируйте обе даты независимо друг от друга и верните True или False в зависимости от того, сможете ли вы успешно проанализировать их обе.

import time

def func(s):

    #Split string on -
    times = s.split('-')

    #If number of elements are not two, return False
    if len(times) != 2:
        return False
    else:

        try:
            #Try to parse both datetimes independently, if you can, return True, otherwise return False
            time.strptime(times[0],'%H:%M')
            time.strptime(times[1], '%H:%M')
            return True
        except:
            return False


print(func('12:00-13:00'))
#True
print(func('12:00-25:00'))
#False
print(func('00:00-25:00'))
#False
print(func('12:00'))
#False
print(func('abcd-efgh'))
#False
print(func('12:00-efgh'))
#False
1 голос
/ 21 мая 2019

код ниже должен помочь вам получить быстрое решение. Примечание: данный пакет имеет лучшую обработку ошибок / исключений и преобразование объекта datetime.

from datetimerange import DateTimeRange

try:
    time_range = DateTimeRange("12:00", "23:00")
    print(time_range)
except ValueError as error:
    print(error)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...