Python para buscar y actualizar la cadena con expresiones regulares

Tengo una cadena debajo, puedo agarrar el 'text' que quería (el texto está distorsionado entre un patrón). el código se da a continuación,

 val1 = '[{"vmdId":"Text1","vmdVersion":"text2","vmId":"text3"},{"vmId":"text4","vmVersion":"text5","vmId":"text6"}]' temp = val1.split(',') list_len = len(temp) for i in range(0, list_len): var = temp[i] found = re.findall(r':"([^(]*)\&quot\;', var) print ''.join(found) 

Me gustaría reemplazar los valores (Texto1, texto2, tex3, etc.) con nuevos valores proporcionados por el usuario o leyendo otro XML. (Text1, tex2 .. son datos totalmente aleatorios y alfanuméricos. Debajo de algunos detalles

 Text1 = somename text2 = alphanumatic value text3 = somename Text4 = somename text5 = alphanumatic value text6 = somename anstring = [{"vmdId":"newText1","vmdVersion":"newtext2","vmId":"newtext3"},{"vmId":"newtext4","vmVersion":"newtext5","vmId":"newtext6"}] 

Decidí ir con replace() pero luego me doy cuenta de que los datos no son constantes. Por lo tanto, buscar ayuda de nuevo. Aprecie su respuesta.

Cualquier ayuda sería apreciada. Además, si me avisan si puedo mejorar la forma en que estoy obteniendo el valor ahora mismo, como nuevo con regex.

Puede hacer esto usando backreferences en combinación con re.sub:

 import re val1 = '[{"vmdId":"Text1","vmdVersion":"text2","vmId":"text3"},{"vmId":"text4","vmVersion":"text5","vmId":"text6"}]' ansstring = re.sub(r'(?<=:")([^(]*)', r'new\g<1>' , val1) print ansstring 

\g<1> es el texto que está en el primer () .

EDITAR

Tal vez un mejor enfoque sería descodificar la cadena, cambiar los datos y codificarlos nuevamente. Esto debería permitirte acceder más fácilmente a los valores.

 import sys # python2 version if sys.version_info[0] < 3: import HTMLParser html = HTMLParser.HTMLParser() html_escape_table = { "&": "&", '"': """, "'": "'", ">": ">", "<": "<", } def html_escape(text): """Produce entities within text.""" return "".join(html_escape_table.get(c,c) for c in text) html.escape = html_escape else: import html import json val1 = '[{"vmdId":"Text1","vmdVersion":"text2","vmId":"text3"},{"vmId":"text4","vmVersion":"text5","vmId":"text6"}]' print(val1) unescaped = html.unescape(val1) json_data = json.loads(unescaped) for d in json_data: d['vmId'] = 'new value' new_unescaped = json.dumps(json_data) new_val = html.escape(new_unescaped) print(new_val) 

Espero que esto ayude.