Как заменить символы в строке, содержащей числа, чтобы получить весь возможный диапазон чисел?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заменить символы в строке, содержащей числа, чтобы получить весь возможный диапазон чисел?

Сообщение Anonymous »


У меня есть некоторые правила для номеров, используемых на VoIP-сервере, например 123?, 20(35-98), 3?6(0-3), 205(3,6,7), 26??, 1( 0-3)7(5,6,7) и так далее.

Я проанализировал эти правила и составил список в своем скрипте Python.

Теперь мне нужно заменить такие символы, как «?», «-», «,» в каждом правиле, чтобы я мог получить все возможные числа из данного правила.

Каждый символ имеет значение, например «?» означает все числа от 0 до 9 (123? -> 1230-1239); '-' означает диапазон от наименьшего числа до наибольшего числа (20(35-98) -> 2035-2098); ',' также дает определенные варианты чисел (205(3,6,7) -> 2053, 2056, 2057).

Как я могу это сделать?

Я попытался разбить строку, а затем выполнить цикл for или while (в зависимости от символа) для каждого числа в скобках, а затем добавить число результата в список. Но код работает только для одного условия, а не если есть, например, '?' и «-» в одном правиле или даже два символа вопросительного знака в одном правиле. Вот код:
rule_numbers = ['790790', '3491', '5110', '790799', '3400', '180(8,9)', '337(0-2)', '34( 00-27)', '3378', '342(1-3,5)', '345(3,6,9)', '3468', '3479', '3499', '3482', '34 ??'] single_rule_numbers = [] для rule_num в rule_numbers: если '?' в правиле_номер: для символа в rule_num: если символ == '?': номер_правила = номер_правила.replace(char, '(0-9)') if len(rule_num) > 5 и rule_num.isdigit(): ## ТОЛЬКО 6-значный single_rule_numbers.append(rule_num) elif '(' в Rule_num и ')' в Rule_num: если '-' и ',' в правиле_номер: maindigits = rule_num.split('(')[0] rangedigits = rule_num.split('(')[1][:-1] для копания в rangedigits.split(','): если '-' в копании: самая низкая_цифра, самая высокая_цифра = dig.split('-') если len(самая низкая_цифра) > 1: индекс = -1 в то время как int(самая низкая_цифра) < int(самая высокая_цифра)+1: digit_str = str(самая низкая_цифра) single_rule_numbers.append(maindigits+str(digit_str)) если int(самая низкая_цифра[индекс]) == 9: индекс -= 1 еще: самая низкая_цифра = самая низкая_цифра[:индекс] + str(int(самая низкая_цифра[индекс:])+1) еще: для копания в диапазоне (int(самая низкая_цифра), int(самая высокая_цифра)+1): single_rule_numbers.append(maindigits+str(dig)) еще: single_rule_numbers.append(основные цифры+копать) elif '-' в номере_правила и ',' не в номере_правила: ## 34(00-35), 34(21-48), 345(0-3) maindigits = rule_num.split('(')[0] rangedigits = rule_num.split('(')[1][:-1] самая низкая_цифра, самая высокая_цифра = диапазон цифр.split('-') если len(самая низкая_цифра) > 1: индекс = -1 в то время как int(самая низкая_цифра) < int(самая высокая_цифра)+1: digit_str = str(самая низкая_цифра) single_rule_numbers.append(maindigits+str(digit_str)) если int(самая низкая_цифра[индекс]) == 9: индекс -= 1 еще: самая низкая_цифра = самая низкая_цифра[:индекс] + str(int(самая низкая_цифра[индекс:])+1) еще: для копания в диапазоне (int(самая низкая_цифра), int(самая высокая_цифра)+1): single_rule_numbers.append(maindigits+str(dig)) elif ',' в правиле_номер и '-' не в правило_номер: ## 345(3,6,8), 34(28,34,53) maindigits = rule_num.split('(')[0] rangedigits = rule_num.split('(')[1][:-1].split(',') для копания в диапазоне цифр: single_rule_numbers.append(основные цифры+копать)
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»