Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

429
Vistas
¿Por qué no da todos los números positivos en la cadena? Regex en Python

No entiendo por qué solo da 125, solo el primer número, ¿por qué no da todos los números positivos en esa cadena? Mi objetivo es extraer todos los números positivos.

 import re pattern = re.compile(r"^[+]?\d+") text = "125 -898 8969 4788 -2 158 -947 599" matches = pattern.finditer(text) for match in matches: print(match)
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Intenta usar la expresión regular

 -\d+|(\d+)

Ignorar los partidos. Las cadenas que representan números enteros no negativos se guardan en el grupo de captura 1.

Manifestación

La idea es hacer coincidir pero no guardar en un grupo de captura lo que no desea (números negativos), y hacer coincidir y guardar en un grupo de captura lo que sí desea (números no negativos).

La expresión regular intenta coincidir con -\d+ . Si eso tiene éxito, el puntero de cadena interno del motor de expresiones regulares se mueve justo después del último dígito coincidente. Si -\d+ no coincide, se intenta hacer coincidir la segunda parte de la alternancia (después de | ). Si \d+ coincide, la coincidencia se guarda en el grupo de captura 1.

Cualquier signo más en la cadena se puede ignorar.

Para obtener una descripción más completa de esta técnica, consulte The Greatest Regex Trick Ever . (Busque "Tarzan"|(Tarzan) para llegar al remate).

over 4 years ago · Santiago Trujillo Denunciar

0

El siguiente patrón solo coincidirá con números no negativos:

 pattern = re.compile("(?:^|[^\-\d])(\d+)") pattern.findall(text)

PRODUCCIÓN

 ['125', '8969', '4788', '158', '599']
over 4 years ago · Santiago Trujillo Denunciar

0

En aras de la exhaustividad, otra idea mediante el uso de \b y un lookbehind .

 \b(?<!-)\d+

Vea esta demostración en regex101

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda