Comment capturer le premier élément numérique d'une chaîne en python? [dupliquer]

Oct 30 2020

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

2 Erfan Oct 30 2020 at 05:35

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

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)

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.