2016-12-18 2 views

ответ

1

Использование регулярных выражений , Сначала найдите начальную и конечную точки, указанные [a-b]. Затем цикл их, и заменить эти скобки увеличением числа:

import re 
expr = input('Enter expression: ') # Blah Blah [1-30] Blah 
start, end = map(int, re.findall('(\d+)-(\d+)', expr)[0]) 
my_list = [re.sub('\[.*\]', str(i), expr) for i in range(start, end + 1)] 

>>> pprint(my_list) 
['Blah Blah 1 Blah', 
'Blah Blah 2 Blah', 
... 
'Blah Blah 29 Blah', 
'Blah Blah 30 Blah'] 
1

Отредактировано вашим потребностям:

import re 
seqre = re.compile("\[(\d+)-(\d+)\]") 
s = "Blah Blah [1-30] blah" 

seq = re.findall(seqre, s)[0] 
start, end = int(seq[0]), int(seq[1]) 

l = [] 
for i in range(start, end+1): 
    l.append(re.sub(seqre, str(i), s)) 
+0

Это в python 3: P, но я хотел, чтобы пользователь вводил одну строку, а затем программу для создания списка. –

+0

Будет ли линия иметь определенные разделители? Например, запятая? –

+0

Я мог бы сделать input(). Split (','), но проблема с тем, что пользователь должен был бы ввести j1, j2, j3 и т. Д. Вместо j [1-10] –

1

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

user_input = input('Please enter your input e.g. blah blah [1-30] blah:') 

list_definiton = (user_input[user_input.find('[')+len(']'):user_input.rfind(']')]) 

minimum = int(list_definiton.split('-')[0]) 
maximum = int(list_definiton.split('-')[1]) 

core_string = user_input.split('[' + list_definiton + ']') 

string_list = [] 
for number in range(minimum, maximum + 1): 
    string_list.append("%s%d%s" % (core_string[0], number, core_string[1])) 

print(string_list) 

Попробуйте here!

+0

Он работает нормально, но регулярное выражение короче и яснее. Спасибо за ваш ответ. –