У меня есть потребность искать все числа с 4 цифрами между 2000 и 3000.
Может случиться так, что буквы прежде и после.
Я думал, что могу использовать [2000-3000]{4}
, но не работает, почему?
спасибо.
Как насчет
^2\d{3}|3000$
Или как Amarghosh & Bart K. & jleedev указал, чтобы соответствовать нескольким случаям
\b(?:2[0-9]{3}|3000)\b
, Если бы вы должны соответствовать a3000
или 3000a
, но не 13000
, вам были бы нужны предвидение и lookbefore как
(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])
, Правильное регулярное выражение будет \ b (2 \ d {3} | 3000) \ b
. Это означает: соответствовать символу «2», то ровно три цифры (это будет соответствовать любым от 2000 до 2999) или просто соответствует «3000». Есть несколько хороших учебных пособий по регулярным выражениям:
HUM TRICKY. Даша - только к персонажу только до и после того, как ваше регулярное выражение на самом деле сопоставлено, является ровно 4 символа от 0 до 3 включительно (т. Е. 0, 1, 2 и 3). Например, 3210, 1230, 3333 и т. Д. ... Попробуйте выражение ниже.
(2 [0-9] {3}) | (3000)
Вот являются объяснением почему и способы обнаружить диапазоны: http://www.regular-expressions.info/numericranges.html
Почему вы не проверяете больше или меньше? его проще, чем регез
num >= 2000 and num <=3000
Регулярные выражения редко подходят для проверки диапазонов, поскольку для диапазонов от 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
?