¿Cómo capturo el primer elemento numérico en una cadena en Python? [duplicar]
Tengo el siguiente código
import re
age = []
txt = ('9', "10y", "4y",'unknown')
for t in txt:
if t.isdigit() is True:
age.append(re.search(r'\d+',t).group(0))
else:
age.append('unknown')
print(age)
y obtengo: ['9', 'desconocido', 'desconocido', 'desconocido']
Entonces el 9 lo obtengo, pero también necesito obtener el 10 en la segunda posición, el 4 en el tercero y desconocido para el último.
¿Alguien puede señalarme en la dirección correcta? ¡Gracias por tu ayuda!
Respuestas
Podemos aprovechar el hecho de que re.searchregresa Noneal no encontrar ningún dígito:
txt = ('9', "10y", "4y",'unknown')
age = []
for t in txt:
num = re.search('\d+', t)
if num:
age.append(num.group(0))
else:
age.append('unknown')
['9', '10', '4', 'unknown']
Ya que etiquetó pandas, si tiene una columna, use str.extract:
pd.Series(txt).str.extract('(\d+)')
0 9
1 10
2 4
3 NaN
dtype: object
import re
age = []
txt = ('9', "10y22", "4y", 'unknown')
for t in txt:
res = re.findall('[0-9]+', t)
if res:
age.append(res[0])
else:
age.append("unknown")
import re
age = []
txt = ('9', "10y", "4y",'unknown')
for t in txt:
if len(t) > 1 and not t.isdigit():
t = t.replace(t[-1], '')
if t.isdigit() is True:
age.append(re.search(r'\d+',t).group(0))
else:
age.append('unknown')
print(age)
Mira esto. Entonces, la función len verifica si la cadena es más grande que uno, y luego, si la última letra de la cadena no es un dígito, entonces la última letra de la cadena se reemplaza con un espacio vacío. Y luego sigue el resto de su algoritmo. Puede modificarlo más para que se ajuste a sus requisitos, ya que no especificó tanto.