Regex - Найдите числа между 2000 и 3000

У меня есть потребность искать все числа с 4 цифрами между 2000 и 3000.

Может случиться так, что буквы прежде и после.

Я думал, что могу использовать [2000-3000]{4}, но не работает, почему?

спасибо.

9
задан Samuel Neff 28 January 2010 в 14:29
поделиться

6 ответов

Как насчет

^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])
,
25
ответ дан 4 December 2019 в 06:16
поделиться

Правильное регулярное выражение будет \ b (2 \ d {3} | 3000) \ b . Это означает: соответствовать символу «2», то ровно три цифры (это будет соответствовать любым от 2000 до 2999) или просто соответствует «3000». Есть несколько хороших учебных пособий по регулярным выражениям:

  1. http://gnosis.cx/publish/programming/regular_expressions.html
  2. http://mimike.net/blog/2007/04/06/the-absolut- Голый минимальный каждый-программист-программист-должен знать-о-регулярные выражения /
  3. http://www.regular-expressions.info/
2
ответ дан 4 December 2019 в 06:16
поделиться

HUM TRICKY. Даша - только к персонажу только до и после того, как ваше регулярное выражение на самом деле сопоставлено, является ровно 4 символа от 0 до 3 включительно (т. Е. 0, 1, 2 и 3). Например, 3210, 1230, 3333 и т. Д. ... Попробуйте выражение ниже.

(2 [0-9] {3}) | (3000)

3
ответ дан 4 December 2019 в 06:16
поделиться

Вот являются объяснением почему и способы обнаружить диапазоны: http://www.regular-expressions.info/numericranges.html

2
ответ дан 4 December 2019 в 06:16
поделиться

Почему вы не проверяете больше или меньше? его проще, чем регез

num >= 2000 and num <=3000 
0
ответ дан 4 December 2019 в 06:16
поделиться

Регулярные выражения редко подходят для проверки диапазонов, поскольку для диапазонов от 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 ?

9
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

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