Регулярное выражение для 12-часового формата времени - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю над регулярным выражением для шаблона времени в Python: часы [1-12], затем :, затем минуты [00:59], затем дополнительный пробел и am или PM в верхнем или нижнем регистре.

Вот код:

def check_time(text):
       pattern = r"^(1[0-2]|0?[1-9]):([0-5]?[0-9])(\s?[AP]M)?$ "
       result = re.search(pattern, text)
       return result != None

       print(check_time("12:45pm")) # Expected True
       print(check_time("9:59 AM")) # Expected True
       print(check_time("6:60am")) # Expected False
       print(check_time("five o'clock")) # Expected False

1 Ответ

0 голосов
/ 27 апреля 2020

Вы должны внести следующие изменения:

  • Использовать поиск без учета регистра, передать re.I флаг
  • Удалить пробел после $
  • Вы может вернуть логический результат, используя bool(re.search(...))
  • Чтобы избежать накладных расходов, связанных с распределением памяти группы захвата, вы можете заменить все группы захвата на группы без захвата ((...) -> (?:...)).

См. Python пример кода :

def check_time(text):
  pattern = r"^(?:1[0-2]|0?[1-9]):(?:[0-5]?[0-9])(?:\s?[AP]M)?$"
  return bool(re.search(pattern, text, flags=re.I))
...