Séparer une chaîne où elle passe d'un caractère numérique à un caractère alphabétique
Je suis à l'analyse de certaines données, où le format standard est quelque chose comme 10 pizzas
. Parfois, les données sont saisies correctement, et nous pourrions nous retrouver avec 5pizzas
au lieu de 5 pizzas
. Dans ce scénario, je veux analyser le nombre de pizzas.
Naïve façon de le faire serait de vérifier le caractère par caractère, construction d'une chaîne de caractères jusqu'à ce que nous arrivons à un chiffre, puis de convertir cette chaîne en un entier.
num_pizzas = ""
for character in data_input:
if character.isdigit():
num_pizzas += character
else:
break
num_pizzas = int(num_pizzas)
C'est assez maladroit, si. Est-il un moyen plus facile de découper une chaîne où il passe de chiffres pour les caractères alphabétiques?
source d'informationauteur Chris
Vous devez vous connecter pour publier un commentaire.
Vous demandez une façon de découper une chaîne de caractères sur les chiffres, mais ensuite, dans votre exemple, ce que vous voulez, c'est juste les premiers numéros, de ce fait facilement avec
itertools.takewhile()
:Cela fait beaucoup de sens ce que nous sommes en train de faire est de prendre le caractère de la chaîne alors qu'ils sont des chiffres. Cela a l'avantage de faire cesser le traitement dès que nous arrivons à la première non-chiffre.
Si vous avez besoin de la plus tard de données, puis ce que vous cherchez est
itertools.groupby()
mélangé avec un simple compréhension de liste:Ensuite, si vous voulez faire un géant numéro:
De diviser la corde au les chiffres, vous pouvez utiliser
re.split
avec l'expression régulière\d+
:Pour trouver le premier numéro de l'utilisation
re.la recherche
:Si vous connaissez le nombre doit être au début de la chaîne, alors vous pouvez utiliser
re.match
au lieu dere.search
. Si vous voulez trouver tous les numéros et jeter le reste vous pouvez utiliserre.findall
.Comment faire un regex ?