Extraer nombres de usuario de texto con Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a extraer nombres de usuario de texto utilizando Python. Esta es una tarea común en aplicaciones de redes sociales y mensajería instantánea, donde el carácter @ se utiliza a menudo para mencionar a alguien.

👀 Vista previa

## Ejemplo 1
>>> from parse_username import after_at
>>> text = "@LabEx @labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Ejemplo 2
>>> text = "@LabEx@labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Ejemplo 3
>>> text = "@labex @LabEx I won in the @LabEx competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Ejemplo 4
>>> text = "@!LabEx @labex I won in the competition"
>>> print(after_at(text))
['labex']
## Ejemplo 5
>>> text = "I won in the competition@"
>>> print(after_at(text))
[]
## Ejemplo 6
>>> text = "LabEx@!"
>>> print(after_at(text))
[]
## Ejemplo 7
>>> text = "@!@LabEx @labex I won in the @LabEx competition @experiment"
>>> print(after_at(text))
['LabEx', 'experiment', 'labex']

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo implementar la función after_at para extraer nombres de usuario de un texto dado
  • Cómo manejar casos extremos y optimizar el rendimiento de la función
  • Cómo probar la función con varios escenarios de entrada

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender cómo utilizar Python para analizar y extraer información relevante de texto
  • Desarrollar una función robusta y eficiente para extraer nombres de usuario de texto
  • Aplicar tus habilidades para resolver problemas para mejorar la funcionalidad de la función
  • Probar tu código exhaustivamente para asegurarte de que funcione como se espera

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/strings -.-> lab-302751{{"Extraer nombres de usuario de texto con Python"}} python/lists -.-> lab-302751{{"Extraer nombres de usuario de texto con Python"}} python/sets -.-> lab-302751{{"Extraer nombres de usuario de texto con Python"}} python/function_definition -.-> lab-302751{{"Extraer nombres de usuario de texto con Python"}} python/file_operations -.-> lab-302751{{"Extraer nombres de usuario de texto con Python"}} end

Implementar la función after_at

En este paso, implementarás la función after_at para extraer nombres de usuario de un texto dado.

  1. Abre el archivo parse_username.py en tu editor de código.

  2. Localiza la definición de la función after_at.

  3. La función debe tomar una cadena text como entrada, que puede estar vacía.

  4. Dentro de la función, inicializa una lista vacía llamada usernames para almacenar los nombres de usuario extraídos.

  5. Encuentra el índice de la primera aparición del carácter @ en el text utilizando el método find(), y guárdalo en la variable at_index.

  6. Mientras at_index no sea -1 (lo que significa que se encontró el carácter @):

    • Inicializa una cadena vacía llamada username.
    • Itera sobre los caracteres en la cadena text comenzando desde el índice después del carácter @.
    • Para cada carácter, comprueba si es alfanumérico o un subrayado utilizando los métodos isalnum() y isalpha().
    • Si el carácter es válido, añádelo a la cadena username.
    • Si el carácter no es válido, sale del bucle.
    • Si username no está vacía, añádelo a la lista usernames.
    • Encuentra la siguiente aparición del carácter @ en la cadena text comenzando desde el índice después del carácter @ anterior.
  7. Después del bucle, elimina cualquier nombre de usuario duplicado de la lista usernames utilizando la función set().

  8. Ordena la lista usernames en orden descendente basado en la cantidad de cada nombre de usuario utilizando la función sorted() con una función de clave personalizada.

  9. Devuelve la lista usernames ordenada.

Tu función after_at completada debería verse así:

def after_at(text):
    usernames = []
    at_index = text.find("@")  ## Encuentra el índice de la primera aparición de "@"
    while at_index!= -1:  ## Continúa el bucle hasta que no se encuentren más símbolos "@"
        username = ""
        for char in text[
            at_index + 1 :
        ]:  ## Itera sobre los caracteres después del símbolo "@"
            if (
                char.isalnum() or char == "_" or char.isalpha()
            ):  ## Comprueba si el carácter es alfanumérico o un subrayado
                username += char  ## Añade el carácter al nombre de usuario
            else:
                break  ## Si el carácter no es alfanumérico o un subrayado, deja de añadir caracteres al nombre de usuario
        if username:
            usernames.append(username)  ## Añade el nombre de usuario extraído a la lista
        at_index = text.find(
            "@", at_index + 1
        )  ## Encuentra el siguiente símbolo "@" comenzando desde el siguiente índice

    ## Elimina duplicados y ordena por cantidad de apariciones en orden descendente
    usernames = sorted(
        list(set(usernames)), key=lambda x: usernames.count(x), reverse=True
    )

    return usernames

Prueba la función after_at

En este paso, probarás la función after_at con los ejemplos proporcionados.

  1. Abre el archivo parse_username.py en tu editor de código.
  2. Localiza el bloque if __name__ == "__main__": al final del archivo.
  3. Dentro del bloque, agrega el siguiente código para probar la función after_at:
## Ejemplo 1
print(after_at("@LabEx @labex I won in the @ competition"))
## Ejemplo 2
print(after_at("@LabEx@labex I won in the @ competition"))
## Ejemplo 3
print(after_at("@labex @LabEx I won in the @LabEx competition"))
## Ejemplo 4
print(after_at("@!LabEx @labex I won in the competition"))
## Ejemplo 5
print(after_at("I won in the competition@"))
## Ejemplo 6
print(after_at("LabEx@!"))
## Ejemplo 7
print(after_at("@!@LabEx @labex I won in the @LabEx competition @experiment"))
  1. Guarda el archivo parse_username.py.
  2. Ejecuta el archivo parse_username.py en tu terminal o línea de comandos utilizando el siguiente comando:
python parse_username.py
  1. Verifica que la salida coincida con los resultados esperados proporcionados en el desafío.
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.