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.
Vous pouvez filter
la chaîne par digits en utilisant str.isdigit
>>> int(filter(str.isdigit, str1))
3158
Ce code fonctionne bien. Il y a certainement un autre problème:
>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
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']
Si le format est aussi simple (un espace sépare le nombre des autres), alors
int(str1.split()[0])
le ferait
IntVar = int("".join(filter(str.isdigit, StringVar)))
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
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
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
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
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.)