web-dev-qa-db-fra.com

Extraire le numéro de la chaîne en Python

Je suis nouveau à Python et j'ai une chaîne, je veux extraire les nombres de la chaîne. Par exemple:

str1 = "3158 reviews"
print (re.findall('\d+', str1 ))

La sortie est ['4', '3']

Je veux obtenir 3158 uniquement, en tant qu'entier de préférence, pas en tant que liste. 

18
Umair

Vous pouvez filter la chaîne par digits en utilisant str.isdigit

>>> int(filter(str.isdigit, str1))
3158
67
Vishnu Upadhyay

Ce code fonctionne bien. Il y a certainement un autre problème:

>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
19
Irshad Bhat

Votre regex semble correcte. Êtes-vous sûr de ne pas vous être trompé avec les noms de variables? Dans votre code ci-dessus, vous mélangez total_hotel_reviews_string et str

>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']
8
hellobenallan

Si le format est aussi simple (un espace sépare le nombre des autres), alors

int(str1.split()[0])

le ferait

6
6502
IntVar = int("".join(filter(str.isdigit, StringVar)))
1
Bernard

Pour extraire un seul numéro d'une chaîne, vous pouvez utiliser re.search() , qui renvoie la première correspondance (ou None):

>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158
1
Eugene Yarmash
a = []
line = "abcd 3455 ijkl 56.78 ij"
for Word in line.split():
 try:
  a.append(float(Word))
  except ValueError:
  pass
print(a)

SORTIE

3455.0 56.78
0
Ayush Singh

Il peut y avoir un petit problème avec le code de la réponse de Vishnu. S'il n'y a pas de chiffres dans la chaîne, il retournera ValueError. Voici ma suggestion éviter ceci:

>>> digit = lambda x: int(filter(str.isdigit, x) or 0)
>>> digit('3158 reviews')
3158
>>> digit('reviews')
0
0
M.Danilchenko

Ma réponse ne nécessite aucune bibliothèque supplémentaire et est facile à comprendre. Mais vous devez remarquer que s'il y a plus d'un numéro dans une chaîne, mon code les concaténera.

def Search_number_String(String):
    index_list = []
    del index_list[:]
    for i, x in enumerate(String):
        if x.isdigit() == True:
            index_list.append(i)
    start = index_list[0]
    end = index_list[-1] + 1
    number = String[start:end]
    return number
0
Yang Qi

Je suis débutant en codage. Ceci est ma tentative de répondre aux questions. Utilisé la version Python3.7 sans importer aucune bibliothèque.

Ce code extrait et renvoie un nombre décimal à partir d'une chaîne constituée de jeux de caractères séparés par des blancs (mots).

Attention: S'il y a plus d'un nombre, la dernière valeur est renvoyée.

line = input ('Please enter your string ')
for Word in line.split():
    try:
        a=float(Word)
        print (a)
    except ValueError:
        pass

Les solutions ci-dessus semblent supposer des entiers. Voici une modification mineure pour autoriser les nombres décimaux:

num = float("".join(filter(lambda d: str.isdigit(d) or d == '.', inputString)

(Ne tient pas compte de - signe et suppose que toute période est correctement placée dans une chaîne de chiffres, pas seulement une période de langue anglaise qui traîne. Elle n'est pas conçue pour être indestructible, mais a fonctionné pour mon cas de données.)

0
thund