J'ai une liste de mots, avec des modèles "term" ou "termNUM", par ex. "term" ou "term02". Je veux enregistrer tous les termes qui se terminent par digit mais supprimer ceux qui sont purement alphabétiques.
Je suis totalement nouveau sur regex, j'ai essayé quelques options et j'obtiens ce qui suit:
new_list = [x for x in old_list if re.match("[(^a-zA-Z_)\d]", x)]
Cela ne fonctionne pas, je sais qu'il n'a besoin que d'un petit ajustement quelque part, mais avec mes compétences limitées en expression régulière, je ne peux pas le faire rapidement.
Les pourboires sont très appréciés.
3 réponses
r".*\d"
C'est n'importe quel caractère (.
), n'importe quel nombre de fois (*
) suivi d'un chiffre (\d
). La compréhension de votre liste est correcte.
Vous pourriez aussi faire
[x for x in old_list if x[-1].isdigit()]
En supposant que la chaîne vide ne figure pas dans la liste. Je préférerais cette option, car elle est plus explicite quant à ce qu'elle fait.
>>> list = ["term", "term2", "term200"]
>>> new_list = [x for x in list if re.match("^[a-zA-Z_]+\d+$", x)]
>>> new_list
['term2', 'term200']
Pourquoi utiliser l'expression régulière, où vous pouvez simplement vérifier que le dernier caractère est un chiffre ou non. c'est à dire.
new_list = [x for x in old_list if x[-1].isdigit()]
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.