python re.sub, solo reemplaza parte del partido

Soy muy nuevo en python

Necesito unir todos los casos por una expresión de expresiones regulares y hacer un reemplazo. esta es una subcadena de muestra -> resultado deseado:

 -->  

Estoy tratando de hacer esto en mi código:

 myString = re.sub(r'\<[A-Za-z0-9_]+(\s[A-Za-z0-9_="\s]+)', "", myString) 

en lugar de reemplazar todo después de <cross_sell , reemplaza todo y simplemente devuelve '>'

¿hay alguna manera de que re.sub reemplace solo el grupo de captura en lugar del patrón completo?

Puedes usar grupos de sustitución:

 >>> my_string = ' --> ' >>> re.sub(r'(\<[A-Za-z0-9_]+)(\s[A-Za-z0-9_="\s]+)', r"\1", my_string) ' --> ' 

Observe que puse el primer grupo (el que desea mantener) entre paréntesis y luego lo guardé en la salida usando el modificador "\1" (primer grupo) en la cadena de reemplazo.

Puede usar una referencia de grupo para hacer coincidir la primera palabra y una clase de caracteres negados para hacer coincidir el rest de la cadena entre <> :

 >>> s='' >>> re.sub(r'(\w+)[^>]+',r'\1',s) '' 

\w es igual a [A-Za-z0-9_] .

Dado que los datos de entrada son XML, es mejor analizarlos con un analizador XML .

El xml.etree.ElementTree es una opción:

 >>> import xml.etree.ElementTree as ET >>> data = '' >>> cross_sell = ET.fromstring(data) >>> cross_sell.attrib = {} >>> ET.tostring(cross_sell) '' 

lxml.etree es otra opción.

debajo del código probado en python 3.6, sin grupo de uso ..

 test = '' resp = re.sub(r'\w+="\w+"' ,r'',test) print (resp)