Artículo original escrito por Bala Priya C
Artículo original Python String Methods Tutorial – How to Use find() and replace() on Python Strings
Traducido y adaptado por andres-torres
Cuando trabajamos con cadenas de texto en Python, podemos necesitar buscar un patrón a en ellas, o incluso reemplazar partes de una cadena con otra sub-cadena.
Python posee dos métodos muy útiles; find()
y replace()
que nos ayudan a ejecutar las tareas de procesar cadenas de texto.
En este tutorial, aprenderemos acerca de estos dos métodos con ejemplos de código.
Inmutabilidad de las cadenas de texto en Python.
Las cadenas de texto en Python son inmutables. Por tanto, no podemos modificarlas.
Las cadenas son interables en Python, y tienen cero-indexación. Los índices válidos para la longitudn
de una cadena son0,1,2,..,(n-1)
.
Podemos usar indexación negativa, donde el último elemento es un índice-1
, el penúltimo elemento es un índice-2
y así sucesivamente.
Por ejemplo, tenemos my_string
que contiene la cadena de texto "writer"
. Intentemos cambiar esto a "writes"
agregando el carácter "s"
.
my_string = "writer"
Intentemos entonces, asignar la letra"s"
como se muestra abajo. Mediante indexación negativa, sabemos que el índice del último carácter en my_string
es -1
.
my_string[-1]="s"
# Output
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-670491032ba6> in <module>()
1 my_string = "writer"
----> 2 my_string[-1]="s"
TypeError: 'str' object does not support item assignment
Cómo se muestra en el código de arriba, tenemos un TypeError
. Esto es debido a que el objeto de cadena es inmutable, y la tarea que intentamos ejecutar es inválida.
Sin embargo, puede que a menudo necesitemos modificar cadenas de texto. Es en este caso que los métodos de cadena nos ayudarán.
Los métodos de cadenas operan en cadenas existentes y retornan una nueva cadena modificada. La cadena existente no es modificada.
Pasemos a la siguiente lección para aprender más acerca de los métodos find()
y replace()
.
Cómo usar find() para buscar patrones en cadenas de Python.
Puedes usar el método find()
para buscar a un patrón específico en una cadena. La sintaxis general es mostrada abajo.
<this_string>.find(<this_pattern>)
La cadena que nos gustaría buscar está definida por this_string
. El patrón que nos gustaría buscar es this_pattern
.
Ahora analicemos la sintaxis anterior.
- El método
find()
busca a través dethis_string
si existe la ocurrencia dethis_pattern
. - Si
this_pattern
existe, entonces retorna el índice inicial de la primera ocurrencia dethis_pattern
. - Si
this_pattern
no está enthis_string
, retorna-1
.
▶ Veamos algunos ejemplos.
Python método find() Ejemplos
Tomemos como ejemplo la siguiente cadena de texto "I enjoy coding in Python!"
.
my_string = "I enjoy coding in Python!"
my_string.find("Python")
# Output
18
En el ejemplo anterior, intentamos buscar "Python"
en "my_string"
. El método find()
retornó 18
, el índice inicial del patrón "Python"
.
Para verificar si el índice retornado es correcto, podemos corroborar si my_string[18]=="P"
es evaluado como True
.
▶ Ahora, intentaremos buscar una sub-cadena que no está presente en nuestra cadena de texto original.
my_string.find("JavaScript")
# Output
-1
En este ejemplo tratamos de buscar"JavaScript"
palabra que no estaba presente en nuestro enunciado. Como consecuencia el método find()
ha retornado -1
, tal como se mencionó anteriormente.
Cómo usar find() para buscar patrones en sub-cadenas en Python.
Podemos usar el método find()
para buscar un patrón en cierta sub-cadena o parte de cadena, en vez de buscar en toda la cadena.
En este caso, la llamada al método find()
toma la siguiente forma:
<this_string>.find(<this_pattern>, <start_index>,<end_index>)
Esto funciona de manera similar a lo descrito anteriormente en la sintaxis.
La única diferencia es que la búsqueda de un patrón no se realiza sobre toda la cadena. Solo se efectúa sobre una parte de la cadena, especificada por start_index:end_index
.
Cómo usar index() para buscar por patrones en cadenas de Python.
Para buscar la ocurrencia de un patrón en una cadena, podemos usar también el método index()
. Llamar a este método conlleva la sintaxis siguiente:
<this_string>.index(<this_pattern>)
El funcionamiento del método index()
también es muy similar al del método find()
.
- Si
this_pattern
está presente enthis_string
, el métodoindex()
retorna el índice inicial de la primera ocurrencia dethis_pattern
. - Sin embargo, genera un
ValueError
sithis_pattern
no es encontrado enthis_string
.
▶ Es hora de dar ejemplos.
Python ejemplos de método index()
Utilicemos la cadena my_string = "I enjoy coding in Python!"
de nuestro ejemplo anterior.
my_string.index("Python")
# Output
18
En este caso, el resultado es idéntico al del método find()
.
Si buscamos por una sub-cadena que no está presente en nuestra cadena, el método index()
proporciona un ValueError
. Esto es mostrado en el siguiente código.
my_string.index("JavaScript")
# Output
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-377f7c374e16> in <module>()
----> 1 my_string.index("JavaScript")
ValueError: substring not found
En la siguiente sección, aprenderemos cómo encontrar y reemplazar patrones en cadenas.
Cómo usar replace() para encontrar y reemplazar patrones en cadenas de Python
Si necesitas buscar un patrón a través de una cadena, y reemplazarlo con otro patrón, entonces puedes usar el método replace()
. La sintaxis general es la siguiente.
<this_string>.replace(<this>,<with_this>)
Analicemos la sintaxis.
- El método
replace()
busca a través dethis_string
por el patrónthis
. - Si el patrón
this
está presente, retorna una nueva cadena de texto donde todas las ocurrencias del patrónthis
son reemplazadas con el patrón especificado en el artículowith_this
. - Si el patrón
this
no es encontrado enthis_string
, la cadena de texto a retornar será la misma quethis_string
.
¿Qué sucede si quieres reemplazar solo un cierto número de ocurrencias en vez de todas las ocurrencias en el patrón?
En este caso, puedes añadir un argumento opcional en la llamada al método que especifique cuantas ocurrencias del patrón te gustaría reemplazar.
<this_string>.replace(<this>,<with_this>, n_occurrences)
En la sintaxis mostrada arriba, n_occurrences
garantiza que solo las primeras t n
ocurrencias del patrón son reemplazadas en la cadena a retornar.
▶ Veamos algunos ejemplos para entender cómo funciona la función replace()
.
Python método replace(), ejemplos
redefinamos my_string
de la forma siguiente:
I enjoy coding in C++.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
Esto es mostrado en el fragmento de código siguiente:
my_string = "I enjoy coding in C++.\nC++ is easy to learn.\nI've been coding in C++ for 2 years now.:)"
Reemplacemos todas las ocurrencias de "C++"
con "Python"
, de la siguiente manera:
my_string.replace("C++","Python")
# Output
'I enjoy coding in Python.\nPython is easy to learn.\nI've been coding in Python for 2 years now.:)'
Cómo el método replace()
regresa una cadena, veamos los caracteres \n
en el resultado. Para que el carácter \n
introduzca saltos de línea, podemos imprimir la cadena como se muestra a continuación:
print(my_string.replace("C++","Python"))
# Output
I enjoy coding in Python.
Python is easy to learn.
I've been coding in Python for 2 years now.:)
En este ejemplo, vemos que todas las ocurrencias de "C++"
han sido reemplazadas con"Python"
.
▶ Ahora, también usaremos el argumento adicional n_occurrences
.
El siguiente código retorna una cadena donde las primeras dos ocurrencias de "C++"
han sido reemplazadas con "Python"
.
print(my_string.replace("C++","Python",2))
# Output
I enjoy coding in Python.
Python is easy to learn.
I've been coding in C++ for 2 years now.:)
El siguiente código retorna una cadena donde solo la primera ocurrencia de "C++"
es reemplazada con "Python"
:
print(my_string.replace("C++","Python",1))
# Output
I enjoy coding in Python.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
▶ Ahora, intentemos reemplazar una sub-cadena "JavaScript"
que no existe en my_string
. Por tanto, la cadena retornada es la misma que my_string
.
print(my_string.replace("JavaScript","Python"))
# Output
I enjoy coding in C++.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
Conclusión
En este tutorial, aprendimos lo siguiente:
- Cómo buscar a través de cadenas de texto en Python, usando los métodos
find()
eindex()
, y además... - Cómo encontrar y reemplazar patrones o sub-cadenas usando el método
replace()
Espero hayas disfrutado de este tutorial.
¡Feliz Aprendizaje!