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.

0
Flake 23 nov. 2011 à 19:54

3 réponses

Meilleure réponse
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.

3
Fred Foo 23 nov. 2011 à 16:03
>>> list = ["term", "term2", "term200"]
>>> new_list = [x for x in list if re.match("^[a-zA-Z_]+\d+$", x)]
>>> new_list
['term2', 'term200']
2
Wile E. Coyote 23 nov. 2011 à 15:57

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()]
3
Avaris 23 nov. 2011 à 16:01
8245193