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.

Análisis de “número @ número” y secuencias similares.

Estoy trabajando en una función de análisis, que eventualmente se utilizará para cálculos de peso de componentes de acero. La función toma una cadena de entrada simple y devuelve los valores individuales (cantidad, calibre, separación) como variables en una lista.

Por ejemplo, debería tomar “5#5” (5 barras número 5) y devolver [5, 5, 0]. O “5#5” (barras número 5 espaciadas cada 250 mm) y devolver [0, 5, 250]. Bastante sencillo.

Mi enfoque es usar una expresión regular para esto, y luego usar re.search o split para obtener los componentes individuales. En el primer caso, la expresión regular sería “\d+#\d+”, en el segundo caso sería “#\d+@\d+”.

El problema surge cuando la entrada tiene decimales. Hay casos en los que alguien podría especificar “#5@122.5”. En ese caso, mi expresión regular se confunde y obtengo “122” en lugar de “122.5”. He estado buscando expresiones regulares para números de punto flotante, pero según lo que he visto, la expresión se vuelve enorme muy rápidamente.

Y en el futuro, quiero añadir soporte para expresiones como “#5@250l500t” (#5 a 250 mm de longitud y 500 mm de ancho), lo cual hace que la expresión regular sea aún más grande y complicada.

Lo que me hace preguntarme: ¿es la expresión regular la mejor manera de hacer esto? ¿O hay algo más que podría usar que funcione mejor para detectar el formato de la expresión y separarlo adecuadamente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Python, regex y análisis de datos, recomendaría considerar un enfoque alternativo para utilizar regex en la función de análisis del peso del componente de acero. Si bien regex puede ser útil en muchos casos, puede volverse complicado y difícil de gestionar a medida que aumenta la complejidad de la cadena de entrada.

    En su lugar, podrías considerar utilizar métodos de cadenas incorporados en Python, como split() o partition() para extraer los componentes individuales de la cadena de entrada. Por ejemplo, podrías dividir la entrada en un carácter específico como ‘#’ o ‘@’ y luego utilizar la función float() incorporada de Python para convertir cualquier valor decimal en decimal.

    Otro enfoque podría ser definir reglas de análisis personalizadas para diferentes tipos de cadenas de entrada, utilizando una combinación de métodos de cadena, expresiones regulares y condicionales para extraer la información necesaria. Esto te permitiría manejar cadenas de entrada más complejas y aún así tener control sobre el proceso de análisis.

    En última instancia, el mejor enfoque dependerá de los requisitos y restricciones específicos de tu proyecto, pero vale la pena considerar alternativas a regex para este caso de uso en particular.

Comments are closed.