J'ai une liste de chaînes telles que: Comment supprimer toutes les chaînes correspondant à tous les chiffres plus Remarque: je ne veux perdre aucune chaîne se terminant par "H" comme "poisson". p> sortie souhaitée: Je savais que cela pourrait être fait par regex, mais je n'ai pas pu définir correctement le groupe de capture. P> P> "HS" code> ou
"h " code> ou
" hr " code>? P>
["Bonjour," 18AAA "] < / Code> P>
3 Réponses :
(\ d + h) code> li>
- Si oui, supprimer l'élément li>
- sinon ne li>
ul>
Des choses assez simples. P>
Le modèle [hr | h | hs] code> correspondra à un caractère de l'ensemble de
h code>,
r code>,
s code >, et
| code>. De plus, les parenthèses autour de
\ d + code> ne font rien.
La regex pourrait être simplifiée à \ d + h code>
Vous êtes tous deux corrects, je vais ajuster la réponse - merci gentiment.
devrait être simple si vous utilisez des filtres de liste + Lambdas comme:
my_list = ["hello","18hs","18aaa","21hr"] # input data custom_filters = [lambda x: not x.endswith('hr'), lambda x: not x.endswith('hs'), lambda x: not x.endswith('h')] # define custom filters final = list(filter(lambda x: all([custom_filter(x) for custom_filter in custom_filters]), my_list)) # apply custom filters one by one # should result in ["hello", "18aaa"]
>>> words = ["hello", "18hs", "18aaa", "21hr", '7hg'] >>> [w for w in words if not re.match(r'\d+h(s|r)?$', w)] ['hello', '18aaa', '7hg']
Merci! C'était ce que je cherchais. Je suis un peu un débutant ...
Selon les exigences, la regex devrait lire ^ \ d + h (s | r)? $ Code>.
@Flinsch Bon point, bien que les conditions soient vagues. J'ai ajouté que dans.