En la cadena:

my_string = 'log   (x)' 

Necesito eliminar todos los espacios ' ' delante del paréntesis izquierdo '('

Esta publicación sugiere utilizar:

re.sub(r'.*(', '(', my_string) 

Lo cual es una exageración porque tiene el mismo efecto que my_string[my_string.index('('):] y elimina también 'log'

¿Hay alguna magia regexpr para eliminar todos los espacios en frente de otro personaje específico?

1
Pythonic 14 ene. 2017 a las 15:17

3 respuestas

La mejor respuesta

Use mirar hacia adelante :

re.sub(r"\s+(?=\()","",my_string)

La entidad entre paréntesis no se consume (no se reemplaza) gracias al operador ?=, y \s+ coincide con cualquier número de espacios en blanco (tabulación, espacio, lo que sea).

Y otra posibilidad sin expresiones regulares:

"(".join([x.rstrip() for x in my_string.split("(")])

(divida la cadena de acuerdo con (, luego únala nuevamente con el mismo carácter aplicando un rstrip() dentro de una lista de comprensión)

3
Jean-François Fabre 14 ene. 2017 a las 12:30

¿Por qué no solo:

re.sub(' +\(', '(', my_string)
4
gitaarik 14 ene. 2017 a las 12:22

Puede usar una aserción anticipada , consulte la sintaxis de expresión regular en la documentación de Python.

import re

my_string = 'log   (x)'
print(re.sub(r'\s+(?=\()', '', my_string))
# log(x)
1
Laurent LAPORTE 14 ene. 2017 a las 12:29