>>> 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]']" "секретное название" создаваемого списка.
Это должно сработать:
^([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
/(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/
:)
Чтобы оставить двоеточие необязательным и разрешить все допустимые времена:
([01]\d|2[0-3]):?[0-5]\d
Обратите внимание, что здесь предполагается, что полночь всегда будет 0000 и никогда 2400.
Я не думаю, что регулярное выражение - правильное решение этой проблемы. Конечно, это МОЖЕТ быть сделано, но это кажется неправильным.
Убедитесь, что ваша строка состоит из четырех символов или 5 символов с двоеточием в середине. Затем проанализируйте каждую сторону и убедитесь, что левая сторона меньше 24, а правая меньше 60.
Решение с регулярным выражением намного сложнее.
Вот сообщение в блоге, ищущее то же самое и кучу потенциальных ответов - большинство из которых не работают, но есть хорошее обсуждение того, почему каждый из них не работает.
Конечно, явно длинный и точный всегда возможен!
Удалите ':'
, если он есть в строке, а затем, если строка имеет форму «DDDD»
, преобразуйте ее в int
и сравните его с 2400.