Вопрос по regex – Решение регулярных выражений для диапазона чисел

2

Я нуждаюсь в regfex для структуры проверки, которая принимает форматы регулярных выражений для проверки. Я не могу использовать арифметические и сравнительные операторы. Я пришел с решением, но оно не работает, как ожидалось. Я хочу знать, что не так с регулярным выражением, которое я придумал, и как правильно с ним разобраться

Regex для любого числа от10429 в40999

Мое решение:

^1042[9-9]|104[3-9][0-9]|10[5-9][0-9][0-9]|1[1-9][0-9][0-9][0-9][0-9]|[2-3][0-9][0-9][0-9][0-9]|40[0-9][0-9][0-9]

Но этот не работает.

1024[9-9] может быть просто10429. Marcelo Cantos

Ваш Ответ

6   ответов
0

попробуй это^(10429|104[3-9]\d|10[5-9]\d{2}|1[1-9]\d{3}|[2-3]\d{4}|40\d{3})$

Это не сработает. Это не удастся, я дам что-то подобное 10429999999999999999 om39a
извиняюсь. редактировать это
это то же самое, что Цилиан вместо того, чтобы создать себя.
0

попробуйте это - \ b (10429 | 104 [3-9] [0-9] | 10 [5-9] [0-9] {2} | 1 [1-9] [0-9] {3} | [23] [0-9] {4} | 40 [0-9] {3}) \ Ъ

0

Я вижу здесь очень длинные регулярные выражения. Эта задача может быть решена без большого количества избыточности в вашем шаблоне. Если у вас нет ничего, кроме регулярных выражений, для работы, вот шаблон, который вы хотите:

^(([123][1-9]|[234]0)[0-9]{3}|10([5-9][0-9]{2}|4([3-9][0-9]|29)))$

Здесь он расширен, чтобы показать вам, что это значит:

 ^                      #The beginning of the line. This ensures 10429 passes, but 9999910429 doesn't.
 (  ,                    
   ([123][1-9]|[234]0)  #This lets the first two digits be anything from 11-40. We'll deal with 10xxx later on.
   [0-9]{3}             #If the first two digits are 11-40, then the last three can be anything from 000-999. 
 |                      
   10                   #Okay, we've covered 11000-40999. Now for 10429-10999.
   (
     [5-9][0-9]{2}      #Now we've covered 10500-10999; on to the 104xx range.
   |
     4                  
     (
        [3-9][0-9]      #Covers 10430-10499.
     |
        29              #Finally, the special case of 10429.
     )
   )                  
 )
 $                      #The end of the line. This ensures 10429 passes, but 104299999 doesn't.

Если числа не являются целыми входными данными, а скорее встроены в строку (например, вы хотите получить все числа из строки "бла-бла-11000 foo 39256 бар 22222", замените оба^ а также$ с\b.

Посмотрите, как это работает на Regexr:http://regexr.com?312p0

0

10429|104[3-9][0-9]|10[5-9][0-9]{2}|1[1-9][0-9]{3}|[23][0-9]{4}|40[0-9]{3} должен сделать свое дело.

Хотя зачем тебе это нужно, это за мной ...

4
  1. 1[1-9][0-9][0-9][0-9][0-9] - too many digits.
  2. ^1|2|3 actually means (?:^1)|2|3 - you need ^(?:10429|...|40[0-9][0-9][0-9])$.
Я попробовал приведенное выше регулярное выражение вtools.netshiftmedia.com/regexlibrary om39a
@ Om39a:... была лень, а не предложение - главное, используя^(?: )$ вокруг вашего образца. В любом случае, Cylian дал автоматизированный инструмент, и это здорово.
+1 за объяснение, почему оригинальное регулярное выражение не сработало.
Регулярное выражение, которое вы дали, принимает диапазон чисел от 100 до 999 также ... om39a
9

Try this

^(10429|104[3-9][0-9]|10[5-9][0-9]{2}|1[1-9][0-9]{3}|[23][0-9]{4}|40[0-9]{3})$

Для генерации номера паттерна посетитеВот.


Надеюсь это поможет.

@ om39a: Спасибо! Зайдите также проверьте www.regexbuddy.com. Это самый надежный инструмент для изучения, тестирования и создания регулярных выражений.
Спасибо за ваше предложение ... проверим это ... om39a
Это работает приятель ... Ссылка, которую вы дали, очень полезна !!! om39a
Подтверждена работа в питоне грубой силой:r = re.compile(r'^(10429|104[3-9][0-9]|10[5-9][0-9]{2}|1[1-9][0-9]{3}|[23][0-9]{4}|40[0-9]{3})$') assert all(r.match(str(n)) if n>=10429 and n<=40999 else True for n in range(100000))
Добро пожаловать!

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