2012-05-18 8 views
9

No estoy familiarizado con la expresión regular, y sería genial si alguien dando una solución usando expresiones regulares pudiera explicar su sintaxis para que pueda aplicarla a situaciones futuras.¿Se elimina la primera aparición de palabra de una cadena?

que tienen una cadena (es decir. 'Description: Mary had a little lamb'), y me gustaría quitar 'Description: ' tal que la cadena se leería 'Mary had a little lamb,', pero sólo la primera instancia, de manera que si la cadena era 'Description: Description', la nueva cadena sería 'Description.'

¿Alguna idea? ¡Gracias!

+0

Do ¿sabes que la primera instancia siempre estará al comienzo de la cadena? –

Respuesta

25

Python str.replace tiene un argumento max replace. Entonces, en su caso, haga esto:

>>>mystring = "Description: Mary had a little lamb Description: " 
>>>print mystring.replace("Description: ","",1) 

"Mary had a little lamb Description: " 

El uso de regex es básicamente el mismo. En primer lugar, obtener su expresión regular:

"Description: " 

Como Python es bastante bueno de expresiones regulares, es sólo la cadena que desea eliminar en este caso. Con eso, usted quiere usarlo en re.sub, que también tiene una variable de recuento:

>>>import re 
>>>re.sub("Description: ","",mystring,count=1) 
'Mary had a little lamb Description: ' 
+1

no necesita especificar el tercer argumento, ya que por defecto es 1 –

+3

@omu_negru No, no es así. Se predetermina a todas las ocurrencias. – jamylak

+0

@omu_negru No tiene el valor predeterminado 1, por defecto es ... Nada, supongo. Si no tiene el tercer argumento, reemplazará todas las instancias, no solo la primera. – Josiah

0

Usando regex simplemente especifique el parámetro de conteo como 1 en re.sub. Aunque parece que regex no es necesario en este caso.

>>> import re 
>>> text = 'Description: Mary had a little lamb' 
>>> re.sub('Description: ','',text,1) 
'Mary had a little lamb' 
+1

¡Ah, está bien, gracias por tu ayuda! – zhuyxn

+0

¿Puedo preguntar qué está haciendo el parámetro de conteo? – song0089

+0

@ song0089 Solo 1 sustitución – jamylak

2

Esta expresión regular funcionará para cualquier "palabra", no sólo "Descripción:"

>>> import re 
>>> s = 'Blah: words words more words' 
>>> print re.sub(r'^\S*\s', '', s) 
words words more words 
>>> 
+0

Si solo quisiera eliminar la primera palabra de una cadena, ¿no usaría simplemente "" .join (s.split ("") [1:])? – Josiah

+4

@Josiah, sería mejor 's.partition (" ") [2]'. – Duncan

Cuestiones relacionadas