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

390
Views
Extraiga todos los números (int y floats) después de una palabra específica

Suponiendo que tengo la siguiente cadena:

 str = """ HELLO 1 Stop #$**& 5.02‼️ 16.1 regex 5 ,#2.3222 """

Quiero exportar todos los números, ya sea int o float después de la palabra "stop" sin distinción entre mayúsculas y minúsculas. por lo que los resultados esperados serán:

 [5.02, 16.1, 5, 2.3222]

Lo más lejos que he llegado hasta ahora es usando PyPi regex de otra publicación aquí:

 regex.compile(r'(?<=stop.*)\d+(?:\.\d+)?', regex.I)

pero esta expresión me da solo [5.02, 16.1]

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Otro más, aunque con el módulo de regex más nuevo:

 (?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?

Vea una demostración en regex101.com .


En Python , esto podría ser

 import regex as re string = """ HELLO 1 Stop #$**& 5.02‼️ 16.1 regex 5 ,#2.3222 """ pattern = re.compile(r'(?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?') numbers = pattern.findall(string) print(numbers)

y rendiría

 ['5.02', '16.1', '5', '2.3222']

No nombre sus variables después de funciones incorporadas, como str , list , dict y similares.


Si necesita ir más allá y limitar su búsqueda dentro de algunos límites (por ejemplo, todos los números entre Stop y end ), también podría usar

 (?:\G(?!\A)|Stop)(?:(?!end)\D)+\K\d+(?:\.\d+)? # ^^^ ^^^

Vea otra demostración en regex101.com .

over 4 years ago · Santiago Trujillo Report

0

Obtiene solo los primeros 2 números, ya que .* no coincide con una nueva línea.

Puede agregar actualizar las banderas a regex.I | regex.S para que el punto coincida con una nueva línea.

 import regex text = """ HELLO 1 Stop #$**& 5.02‼️ 16.1 regex 5 ,#2.3222 """ pattern = regex.compile(r'(?<=\bstop\b.*)\d+(?:\.\d+)?', regex.I | regex.S) print(regex.findall(pattern, text))

Producción

 ['5.02', '16.1', '5', '2.3222']

Ver una demostración de Python


Si desea imprimir los números después de la palabra "stop", también puede usar python re y match stop, y luego capturar en un grupo todo lo que sigue.

Luego puede tomar ese valor del grupo 1 y encontrar todos los números.

 import re text = """ HELLO 1 Stop #$**& 5.02‼️ 16.1 regex 5 ,#2.3222 """ pattern = r"\bStop\b(.+)" m = re.search(pattern, text, re.S|re.I) if m: print(re.findall(r"\d+(?:\.\d+)*", m.group(1)))

Producción

 ['5.02', '16.1', '5', '2.3222']
over 4 years ago · Santiago Trujillo Report

0

Podrías usar:

 inp = """ HELLO 1 Stop #$**& 5.02‼️ 16.1 regex 5 ,#2.3222""" nums = [] if re.search(r'\bstop\b', inp, flags=re.I): inp = re.sub(r'^.*?\bstop\b', '', inp, flags=re.S|re.I) nums = re.findall(r'\d+(?:\.\d+)?', inp) print(nums) # ['5.02', '16.1', '5', '2.3222']

La lógica if anterior garantiza que solo intentemos completar la matriz de números si estamos seguros de que Stop aparece en el texto de entrada. De lo contrario, la salida predeterminada es solo una matriz vacía. Si aparece Stop , eliminamos la parte inicial de la cadena antes de usar re.findall para encontrar todos los números que aparecen después.

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!