Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

230
Vistas
Cómo reemplazar varias subcadenas al mismo tiempo

tengo una cadena como

 a = "X1+X2*X3*X1" b = {"X1":"XX0","X2":"XX1","X0":"XX2"}

Quiero reemplazar la subcadena 'X1,X2,X3' usando dict b.

Sin embargo, cuando reemplazo usando el siguiente código,

 for x in b: a = a.replace(x,b[x]) print(a)

'XXX2+XX1*X3'

El resultado esperado es XX0 + XX1*X3*XX0

Sé que es porque la subcadena se reemplaza en un bucle, pero no sé cómo resolverlo.

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Puede usar el parámetro repl de re.sub :

 import re re.sub('X\d', lambda x: b.get(x.group(), x.group()), a)

producción:

 'XX0+XX1*X3*XX0'
over 4 years ago · Santiago Trujillo Denunciar

0

Puede crear un patrón con '|' luego busque en la transformación del diccionario como se muestra a continuación.

Prueba esto:

 import re a = "X1+X2*X3*X1" b = {"X1":"XX0","X2":"XX1","X0":"XX2"} pattern = re.compile("|".join(b.keys())) out = pattern.sub(lambda x: b[re.escape(x.group(0))], a)

Producción:

 >>> out 'XX0+XX1*X3*XX0'
over 4 years ago · Santiago Trujillo Denunciar

0

La razón de esto es porque está reemplazando la misma cadena varias veces, por lo que detrás de escena (o entre las iteraciones) hay algunos interruptores más en el medio que probablemente no vea (a menos que esté depurando este código). Tenga en cuenta que las claves del diccionario no están ordenadas, por lo que no puede asumir qué se reemplaza y cuándo. Te sugiero que uses la plantilla

over 4 years ago · Santiago Trujillo Denunciar

0

Con solo funciones integradas. El diccionario b dado contiene ciclos entre claves y valores, por lo que usó la notación f-string para realizar las sustituciones. Para escapar de {} uno debe duplicarlos {{}} , usado para sustitución repetida. La enumerate es necesaria para obtener claves únicas en el nuevo diccionario, así que no más ciclos.

 a = "X1+X2*X3*X1" b = {"X1":"XX0","X2":"XX1","X0":"XX2"} new_dict = {} for i, k in enumerate(b): sub_format = f'{k}' + f'{i}' new_dict[sub_format] = b[k] a = a.replace(k, f'{{{sub_format}}}') print(a.format(**new_dict))

Producción

 XX0+XX1*X3*XX0
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda