У меня была интересная проблема на днях, в которой я думал, будет довольно тривиальным, но на самом деле оказалось немного боли.
Даты Великобритании часто записаны в следующих форматах:
- дд/мм/г
- ДД/ММ/ГГГГ
Сценарий, который я писал, нужно было сделать быструю и грязную проверку, что вход строки был в одной из действительных форм перед использованием Правильная библиотека на самом деле прочитать дату.
Первое регулярное выражение, которое я пытался, оказался не действительным в Python, поэтому я начал использовать отличные Pythex Интернет-инструмент, чтобы помочь поделать что-то, что будет работать.
В примерах при следующем добавьте начало и конечные якоря мысленно, я их пропускал.
Моя первая наивная попытка не работала вообще:
\d{2}/\d{2}/[\d{4}|\d{2}]
Это соответствовало, если бы год был одна цифра долго. Я думал, что, возможно, именно потому, что у меня была более длительная последовательность в начале, но обмениваясь вокруг или (символ трубы) не имеет значения.
Первый вопрос здесь – квадратные скобки, которые на самом деле является выбором последовательности символов. Я просто забыл, что это означало, поэтому я думаю, что все, что было сопоставлено, было однозначным характером, так как весь квадратный кронштейн оценивает одному символу.
Хорошо…
\d{2}/\d{2}/\d{2}|\d{4}
Этот вид работ, за исключением того, что он не соответствует четырем датам цифры, но все, что имеет как минимум две цифры, поэтому три цифры в порядке, если у вас нет границы линии.
Как или Оценивается слева направо, моя первая формулировка была фактически правильной.
\d{2}/\d{2}/\d{4}|\d{2}
А также для TL; доктор вырезать и вставить версию
r'\A\d{2}/\d{2}/(\d{4}|\d{2})\Z'
Я не ожидал, что это будет такая борьба, я был в своем роде старая поговорка попыток решить проблему с регулярным выражением и заканчиваться двумя проблемами …
Оригинал: “https://dev.to/rrees/checking-whether-a-number-sequence-has-two-or-four-digits-in-python-4a82”