J'ai une liste de noms de colonnes ['aa_bb', 'aa_cc_bb', 'ff_bb'] Je veux renvoyer des colonnes qui ont bb mais pas aa ou cc donc les résultats pour ce qui précède devraient être ff_bb

0
kenneth Odumah 27 août 2020 à 15:09

2 réponses

Meilleure réponse

Je sais que vous avez posé une question sur le regard - derrière , mais vous pouvez utiliser une assertion de regard négatif - avant au début de votre expression. Si la chaîne a un aa ou cc, alors le .*(aa|cc) à l'intérieur de l'anticipation négative correspondra, donc l'expression rationnelle dans son ensemble échouera.

(Mettre le look-behind négatif équivalent à la fin ne fonctionnerait pas, car le look-behind ne peut pas contenir de motifs de largeur variable tels que .*.)

>>> import re
>>> names = ['aa_bb', 'aa_cc_bb', 'ff_bb']
>>> pattern = '(?!.*(aa|cc)).*bb'
>>> [name for name in names if re.match(pattern, name)]
['ff_bb']
0
alani 27 août 2020 à 12:21

Vous n'avez pas vraiment besoin d'utiliser regex. Tu peux le faire:

for item in lst:
    if "aa" not in item and "cc" not in item and "bb" in item:
        print(item)
0
hippozhipos 27 août 2020 à 12:12