Como faço para capturar o primeiro elemento numérico em uma string em python? [duplicado]

Oct 30 2020

Eu tenho o código abaixo

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)

e eu obtenho: ['9', 'desconhecido', 'desconhecido', 'desconhecido']

Então o 9 eu consigo, mas também preciso pegar o 10 na segunda posição, o 4 na terceira e desconhecido para o último.
Alguém pode me apontar na direção certa? Obrigado pela ajuda!

Respostas

2 Erfan Oct 30 2020 at 05:35

Podemos aproveitar o fato de que re.searchretorna Noneao não encontrar nenhum 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']

Já que você marcou pandas, se você tiver uma coluna, use str.extract:

pd.Series(txt).str.extract('(\d+)')
0      9
1     10
2      4
3    NaN
dtype: object

sahasrara62 Oct 30 2020 at 05:39
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")
dippie Oct 30 2020 at 05:49
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)

Veja isso. Portanto, a função len verifica se a string é maior do que um e, se a última letra da string não for um dígito, a última letra da string está sendo substituída por um espaço vazio. E então segue o resto do seu algoritmo. Você pode modificá-lo mais para atender aos seus requisitos, uma vez que você não especificou muito.