es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de utilizar regex para buscar una cantidad de caracteres x después de una palabra clave pero antes de llegar a ‘|’ ?

Cuando se itera a través de una lista, se devolvería un ejemplo de una cadena a continuación. Estoy tratando de guardar el nombre del equipo como una variable. Sin embargo, para cada cadena que se examinará dentro de la lista, el nombre puede tener cualquier cantidad de caracteres.

Además, al guardar la puntuación total como una variable, logré esto a través de

pointTotal = re.search("Total:" + r'.\w+', eachEntry)

aunque esto obviamente no funcionará para nombres de equipos que abarcan varias palabras.

Mi objetivo es realizar una búsqueda regex en todos los caracteres (que también pueden ser números) que siguen a ‘Name:’ hasta que alcance el símbolo de tubería (|). En última instancia, me gustaría terminar con teamName = “Avacado Helmets”

..."|Keypad:6 |Name:Avacado Helmets  |Pressed:E  |Seconds:15.73  |Question Points:0  |Total:5802"

Espero que esta pregunta no sea demasiado enrevesada. He estado buscando en las herramientas de prueba de regex para tratar de entenderlo, pero creo que necesito un poco de orientación. Estoy comenzando a familiarizarme con regex y la programación en general, y agradecería cualquier ayuda. Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extraer el nombre del equipo de la cadena, puedes usar la expresión regular Name:(.*?)\s*\|, que coincidirá con el texto después de Name: y antes del siguiente símbolo |. Aquí tienes un ejemplo de implementación en Python:

    import re
    
    string = "|Keypad:6 |Name:Avacado Helmets  |Pressed:E  |Seconds:15.73  |Question Points:0  |Total:5802"
    
    team_name_regex = re.compile(r"Name:(.*?)\s*\|")
    match = team_name_regex.search(string)
    
    if match:
        # Extrae el nombre del equipo del primer grupo de captura
        team_name = match.group(1).strip()
        print(team_name)
    

    Esto imprimirá:

    Avacado Helmets
    

    Explicación de la expresión regular:
    Name: coincide con la cadena literal “Name:”
    (.*?) es un grupo de captura que coincide con cualquier carácter (excepto salto de línea) cero o más veces, de la forma más corta posible (usando el modificador no ambicioso ?). Esto coincidirá con el nombre del equipo.
    \s* coincide con cualquier carácter de espacio en blanco (espacio, tabulación, salto de línea) cero o más veces. Esto permite cualquier espacio en blanco adicional después del nombre del equipo.
    \| coincide con el símbolo de barra vertical “|”, que sigue al nombre del equipo. Se utiliza una barra invertida para escapar el símbolo de barra vertical, que tiene un significado especial en las expresiones regulares.

Comments are closed.