Pregunta sobre python, regex – ¿Eliminando la primera aparición de una palabra de una cuerda?

13

No estoy familiarizado con las expresiones regulares, y sería genial si alguien que da una solución con expresiones regulares pueda explicar su sintaxis para poder aplicarla en situaciones futuras.

Tengo una cadena (es decir,'Description: Mary had a little lamb'), y me gustaría quitar'Description: ' tal que la cadena se lea'Mary had a little lamb,' pero solo la primera instancia, tal que si la cadena fuera'Description: Description', la nueva cadena seria'Description.'

¿Algunas ideas? ¡Gracias!

¿Sabes que la primera instancia siempre será al principio de la cadena? Mark Byers

Tu respuesta

3   la respuesta
32

Pitónstr.replace tiene un argumento de reemplazo máximo. Entonces, en tu caso, haz esto:

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

"Mary had a little lamb Description: "

Usar regex es básicamente lo mismo. Primero, obtenga su expresión regular:

"Description: "

Como Python es bastante bueno con las expresiones regulares, es solo la cadena que desea eliminar en este caso. Con eso, quieres usarlo en re.sub, que también tiene una variable de conteo:

>>>import re
>>>re.sub("Description: ","",mystring,count=1)
'Mary had a little lamb Description: '
@omu_negru No, no lo hace. El valor predeterminado es todos los casos. jamylak
@zhuyxn Actualizado para tener una solución de expresiones regulares. Josiah
Ah, acabo de enterarme de .replace () hace unos minutos, ¡Gracias! Aún sería útil saber usar regex zhuyxn
@omu_negru No se establece por defecto en 1, por defecto es ... Nada, supongo. Si no tiene el tercer argumento, reemplazará todas las instancias, no solo la primera. Josiah
no es necesario especificar el tercer argumento, ya que su valor predeterminado es 1 omu_negru
2

palabra", no solo "Descripción:"

>>> import re
>>> s = 'Blah: words words more words'
>>> print re.sub(r'^\S*\s', '', s)
words words more words
>>> 
Si solo quisiera eliminar la primera palabra de una cadena, ¿no usaría simplemente "" .join (s.split ("") [1:])? Josiah
@Josiah, mejor serías.partition(" ")[2]. Duncan
0

Utilizandoregex solo especifica el parámetro de cuenta como1 enre.sub. Aunque parezcaregex 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'
@ song0089 Sólo 1 sustitución jamylak
¿Puedo preguntar qué está haciendo el parámetro de conteo? song0089
Ah, ok gracias por tu ayuda! zhuyxn

Preguntas relacionadas