Me han dado algunas condiciones para trabajar. Cada uno representa un conjunto de datos y consta del nombre del conjunto de datos y las estadísticas asociadas. Todos ellos tienen la siguiente forma:Python Regex para analizar Cadena y devolver Tuple
s= "| 'TOMATOES_PICKED' | 914 | 1397 |"
Estoy tratando de implementar una función que va a analizar la cadena y devolver el nombre del conjunto de datos, el primer número y el segundo número. Hay muchas de estas cadenas y cada una tiene un nombre diferente y estadísticas asociadas, así que he pensado que la mejor manera de hacerlo es con expresiones regulares. Esto es lo que tengo hasta ahora:
def extract_data2(s):
import re
name=re.search('\'(.*?)\'',s).group(1)
n1=re.search('\|(.*)\|',s)
return(name,n1,)
Así que he hecho un poco de lectura sobre las expresiones regulares y descubierto la manera de devolver el nombre. Para cada una de las cadenas con las que estoy trabajando, el nombre del conjunto de datos está delimitado por '', así es como encontré el nombre. Esa parte funciona bien. Mi problema es obtener los números. Lo que estoy pensando ahora es intentar hacer coincidir un patrón que está precedido por una barra vertical ('|'), luego cualquier cosa (que es por lo que utilicé. *), Y seguido por otra barra vertical para tratar de obtener el primer número. ¿Alguien sabe cómo puedo hacer esto en Python? Lo que probé en el código anterior para el primer número devuelve básicamente toda la cadena como mi salida, mientras que quiero obtener solo el número. -Estoy muy nuevo en la programación, así que me disculpo si esta pregunta parece rudimentaria, pero he estado leyendo y buscando bastante diligentemente las respuestas que están cerca de mi caso sin suerte. Agradezco cualquier ayuda. La idea es que va a ser capaz de:
return(name,n1,n2)
de modo que cuando el usuario introduce una cadena, sólo se puede analizar la secuencia y devolver la información importante. Me he dado cuenta en mis intentos de obtener los números hasta ahora que devolverá el número como una cadena. ¿Hay alguna forma de devolver n1 o n2 como solo un número? Tenga en cuenta que para algunas de las cadenas n1 y n2 podrían ser enteros o tener un decimal.
Este tipo de cadenas con campos bien definidos a menudo son más rápidas y fáciles de analizar utilizando solo la división de cadenas, picado, etc., p. Ej. '[str.strip for ss in" | ".split (s)]' te ayudará a comenzar. – Keith