2016-02-15 5 views
1

Кто-то знает, как что-то вроде:Regular Expression

array = ["one", "two", "three"] 
str = "text123123text:[852],[456465],[1]" 

И я хочу заменить все квадратные скобки, чтобы привести

output: text123123text:'one', 'two', 'three' 

я стараюсь по re.sub('\[.*?\]'," ''", str) и я получил output: text123123text:'', '', '' Это, конечно, логическим , но как создать метод, который для каждой подзадачной функции вызова с аргументом замены индекса и последующим возвратом текста из массива.

В псевдокоде я представляю себе это, что:

array = ["one", "two", "three"] 
def abstract_function(replace_index): 
    return array[replace_index] 

str = "text123123text:[852],[456465],[1]" 
print re.sub('\[.*?\]'," '$CALL:abstract_function$'", str) 

output: text123123text:'one', 'two', 'three' 

Exist любой метод, чтобы решить мою проблему?

ответ

2

Я хотел бы сделать так,

>>> stri = "text123123text:[852],[456465],[1]" 
>>> array = ["one", "two", "three"] 
>>> d = {i:j for i,j in zip(re.findall(r'\[[^\]]*\]', stri), array)} # create a dict with values inside square brackets as keys and array list values as values. 
>>> d 
{'[852]': 'one', '[456465]': 'two', '[1]': 'three'} 
>>> re.sub(r'\[[^\]]*\]', lambda m: "'" + d[m.group()] + "'", stri) # replaces the key with the corresponding dict value. 
"text123123text:'one','two','three'" 
+0

Спасибо Вам, Авинаш Радж :) –