RegEx для несоответствия числовых значений, начиная с 4 до 5 цифр - PullRequest
0 голосов
/ 28 апреля 2019

Я хочу сопоставить все числовые значения, кроме цифр, начинающихся с 4 до 5 цифр, и я написал регулярное выражение, которое соответствует числовым, начиная с 4 до 5 цифр, но я хочу инвертировать это совпадение.

c = '475555'
e = (re.search(r'(\A4[0-9]{5})',c).group(0))

Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Это регулярное выражение будет делать:

\b(?!4\d{0,4}\b)\d+\b

Идея состоит в том, чтобы использовать отрицательный взгляд вперед, чтобы отбросить числа, которые начинаются с 4 и могут иметь еще от 0 до 4 цифр.

Regex Demo

Код Python:

import re

s = '475555 4 41 412 4123 4123 412345'

print(re.findall(r'\b(?!4\d{0,4}\b)\d+\b', s))

печать

['475555', '412345']

Если вы хотите сопоставить одно число за раз как целую строку, вы можете использовать это регулярное выражение:

^(?!4\d{0,4}$)\d+$

Демонстрация регулярных выражений в виде всего ввода

0 голосов
/ 28 апреля 2019

Помимо негативного взгляда, вы могли бы просто "изложить", что вы хотите иметь:

r'[12356789]\d{0,4}'

будет соответствовать от 1 до 9 (без 4 или от 0), за которыми следуют до 4 цифр.

Пример:

import re

i = 0
for k in range(1,99999):
    if re.match(r'[12356789]\d{0,4}',str(k)):
        # print(k)
        i += 1

print(i) # 88887

Он доставляет вам 88887 матчей, потому что:

range(1,99999)   (max excluded)   = 99998 values
4                                 =     1 value
40,41,42, ..., 49                 =    10 values
400,401,402, ..., 499             =   100 values
4000,4001,4002, ..., 4999         =  1000 values
40000,40001,40002, ..., 49999     = 10000 values

99998 - 1 - 10 - 100 - 1000 - 10000 = 88887
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...