Tengo la siguiente pregunta. Como entrada tengo un nombre de fecha, que debe tener una cierta nomenclatura, como

  1. Footballfield_01_CampNou_108m_Length_68.5_Width
  2. Footballfield_02_Bernabeau_105m_Length_68.5_Width

Para el ancho falta el metro. Pero no puedo cambiar el nombre y tengo que trabajar con esto. Mi tarea ahora es escribir un código, que extrae solo la longitud y el ancho del nombre de los datos para calcular el área. He tenido varias ideas, pero son propensas a errores y no son lo suficientemente sólidas. Mi idea ahora se basa en saber que tengo un valor entero (longitud) y un valor flotante (ancho). Quiero escribir un código que encuentre el valor flotante y el valor entero en la cadena y los asigne al ancho y largo, pero no puedo encontrar ninguna manera, ¿alguien puede ayudarme?

0
Elias_HH 12 oct. 2020 a las 20:09

1 respuesta

La mejor respuesta

Parece que podrías usar regex para resolver esta tarea:

import re
//somehow get the input_list
for entry in input_list:
    match = re.match(r"\w+_\d+_\w+_(\d+)m_Length_(([0-9]*[.])?[0-9]+)_Width", entry)
    length, width, _ = match.groups()
    length = int(length)
    width = float(width)

Entrando en más detalles sobre la expresión regular:

  • \w+ coincide con caracteres alfabéticos
  • \d+ coincide con dígitos
  • _ coincide con _ literalmente
  • () alrededor de una expresión regular captura ese valor para devolver
  • (([0-9]*[.])?[0-9]+) está calculando la parte de punto flotante como se explica aquí Expresión regular para números de punto flotante

https://regex101.com/r/8BOvMh/1 ejemplo de trabajo en línea

1
Ryan Schaefer 12 oct. 2020 a las 20:35