-6
votes

Comment supprimer toutes les cordes contenant des chiffres avant "HS" comme "18hs" d'une liste de chaînes?

J'ai une liste de chaînes telles que: xxx

Comment supprimer toutes les chaînes correspondant à tous les chiffres plus "HS" ou "h " ou " hr "?

Remarque: je ne veux perdre aucune chaîne se terminant par "H" comme "poisson".

sortie souhaitée: ["Bonjour," 18AAA "] < / Code>

Je savais que cela pourrait être fait par regex, mais je n'ai pas pu définir correctement le groupe de capture.


0 commentaires

3 Réponses :


0
votes
  • boucle à travers eux
  • Vérifiez s'il y a des correspondances pour cette regex: (\ d + h)
  • Si oui, supprimer l'élément
  • sinon ne

    Des choses assez simples.


3 commentaires

Le modèle [hr | h | hs] correspondra à un caractère de l'ensemble de h , r , s , et | . De plus, les parenthèses autour de \ d + ne font rien.


La regex pourrait être simplifiée à \ d + h


Vous êtes tous deux corrects, je vais ajuster la réponse - merci gentiment.



0
votes

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"]


0 commentaires

3
votes
>>> words = ["hello", "18hs", "18aaa", "21hr", '7hg']
>>> [w for w in words if not re.match(r'\d+h(s|r)?$', w)]
['hello', '18aaa', '7hg']

3 commentaires

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)? $ .


@Flinsch Bon point, bien que les conditions soient vagues. J'ai ajouté que dans.