Регулярное выражение для соответствия времени в военном (24-часовом) формате

>>> x=[1,1,2,'a','a',3]
>>> y = [ _x for _x in x if not _x in locals()['_[1]'] ]
>>> y
[1, 2, 'a', 3]


"местные жители () [' _ [1]']" "секретное название" создаваемого списка.

36
задан Alan Moore 8 October 2014 в 18:27
поделиться

7 ответов

Это должно сработать:

^([01]\d|2[0-3]):?([0-5]\d)$

Выражение гласит:

^        Start of string (anchor)
(        begin capturing group
  [01]   a "0" or "1"
  \d     any digit
 |       or
  2[0-3] "2" followed by a character between 0 and 3 inclusive
)        end capturing group
:?       optional colon
(        start capturing
  [0-5]  character between 0 and 5
  \d     digit
)        end group
$        end of string anchor
112
ответ дан 27 November 2019 в 05:12
поделиться
/(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23):?(0|1|2|3|4|5)\d/

:)

7
ответ дан 27 November 2019 в 05:12
поделиться

Чтобы оставить двоеточие необязательным и разрешить все допустимые времена:

([01]\d|2[0-3]):?[0-5]\d

Обратите внимание, что здесь предполагается, что полночь всегда будет 0000 и никогда 2400.

2
ответ дан 27 November 2019 в 05:12
поделиться

Я не думаю, что регулярное выражение - правильное решение этой проблемы. Конечно, это МОЖЕТ быть сделано, но это кажется неправильным.

Убедитесь, что ваша строка состоит из четырех символов или 5 символов с двоеточием в середине. Затем проанализируйте каждую сторону и убедитесь, что левая сторона меньше 24, а правая меньше 60.

Решение с регулярным выражением намного сложнее.

-1
ответ дан 27 November 2019 в 05:12
поделиться

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

Конечно, явно длинный и точный всегда возможен!

0
ответ дан 27 November 2019 в 05:12
поделиться
/^(?:[01]\d|2[0-3]):?[0-5]\d$/
-1
ответ дан 27 November 2019 в 05:12
поделиться

Удалите ':' , если он есть в строке, а затем, если строка имеет форму «DDDD» , преобразуйте ее в int и сравните его с 2400.

-1
ответ дан 27 November 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: