Comment capturer le premier élément numérique d'une chaîne en python? [dupliquer]
J'ai le code ci-dessous
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)
et j'obtiens: ['9', 'unknown', 'unknown', 'unknown']
Donc le 9 je reçois, mais je dois aussi obtenir le 10 en deuxième position, le 4 en troisième et inconnu pour le dernier.
Est-ce que quelqu'un peut-il me montrer la bonne direction? Merci de votre aide!
Réponses
Nous pouvons utiliser le fait que re.searchrenvoie Nonelorsque vous ne trouvez aucun chiffre:
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']
Depuis que vous avez balisé pandas, si vous avez une colonne, utilisez 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)
Regarde ça. Ainsi, la fonction len vérifie si la chaîne est supérieure à un, puis si la dernière lettre de la chaîne n'est pas un chiffre, la dernière lettre de la chaîne est remplacée par un espace vide. Et puis il suit le reste de votre algorithme. Vous pouvez le modifier davantage pour répondre à vos besoins, car vous n'en avez pas spécifié beaucoup.