Como faço para capturar o primeiro elemento numérico em uma string em python? [duplicado]
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
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
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)
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.