Регулярные выражения редко подходят для проверки диапазонов, поскольку для диапазонов от 27 до 9076 включительно они становятся невероятно безобразными. Это можно сделать, но вам действительно лучше просто сделать регулярное выражение для проверки чисел, что-то вроде:
^[0-9]+$
, который должен работать примерно на каждом движке регулярных выражений, а затем проверить диапазон вручную.
Всего:
def isBetween2kAnd3k(s):
if not s.match ("^[0-9]+$"):
return false
i = s.toInt()
if i < 2000 or i > 3000:
return false
return true
Что проверяет конкретное регулярное выражение [2000-3000]{4}
, это ровно четыре вхождения любого из следующих символов: 2,0,0,0-3,0,0,0
- другими словами, ровно четыре цифры взяты из 0-3
.
С буквами до и после, вам нужно будет изменить регулярное выражение и проверить правильную подстроку, например:
def isBetween2kAnd3kWithLetters(s):
if not s.match ("^[A-Za-z]*[0-9]{4}[A-Za-z]*$"):
return false
idx = s.locate ("[0-9]")
i = s.substring(idx,4).toInt()
if i < 2000 or i > 3000:
return false
return true
Кроме того, регулярное выражение для проверки диапазона от 27 до 9076 включительно было бы примерно таким отвратительным чудовищем:
^2[7-9]|[3-9][9-9]|[1-9][0-9]{2}|[1-8][0-9]{3}|90[0-6][0-9]|907[0-6]$
Я думаю, что это значительно менее читабельно, чем использование ^[1-9][0-9]+$
, а затем проверка, находится ли оно между 27 и 9076, с помощью оператора if
?