Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

435
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!