Tengo algunas líneas que representan algunos datos en un archivo de texto. Todos ellos son de la siguiente formato:Python Regex para hacer coincidir una cadena como un patrón y devolver el número
s = 'TheBears SUCCESS Number of wins : 14'
Todos comienzan con el nombre y luego el espacio en blanco y el texto 'ÉXITO número de victorias:' y, finalmente, el número de victorias, n1. Hay múltiples cadenas, cada una con un nombre y valor diferente. Estoy intentando escribir un programa que pueda analizar cualquiera de estas cadenas y devolver el nombre del conjunto de datos y el valor numérico al final de la cadena. Estoy tratando de utilizar expresiones regulares para hacer esto y yo he llegado con lo siguiente:
import re
def winnumbers(s):
pattern = re.compile(r"""(?P<name>.*?) #starting name
\s*SUCCESS #whitespace and success
\s*Number\s*of\s*wins #whitespace and strings
\s*\:\s*(?P<n1>.*?)""",re.VERBOSE)
match = pattern.match(s)
name = match.group("name")
n1 = match.group("n1")
return (name, n1)
Hasta ahora, mi programa puede devolver el nombre, pero el problema viene después de eso. Todos ellos tienen el texto "ÉXITO Número de victorias:" así que pensé en encontrar la manera de unir este texto. Pero me doy cuenta de que mi método de emparejar una subcadena exacta no es correcto en este momento. ¿Hay alguna forma de unir una subcadena completa como parte del patrón? Últimamente he estado leyendo bastante sobre expresiones regulares, pero no he encontrado nada como esto. Todavía soy nuevo en la programación y agradezco cualquier ayuda.
Eventualmente, usaré float() para devolver n1 como un número, pero lo dejé porque no encuentra el número en primer lugar en este momento y solo devolverá un error.
Su problema es el uso del '. *?' Al final de la expresión regular. El '?' Lo hace perezoso lo que significa que coincidirá con la menor cantidad de caracteres posible, por lo que si finaliza una expresión regular con '. *?' No coincidirá con ningún carácter. O elimine '?' Para su grupo 'n1' o agregue un' $ 'al final de la expresión regular para que se forzará que coincida con el final de la línea. –
¿Eliminar el? al final del grupo n1 hizo el truco! Muchas gracias. Tendré que tener eso en cuenta y ser más cuidadoso al respecto a partir de ahora. –