10
votes

Regex pour trouver un et pas b sur une ligne

Je recherche une regex pour rechercher mon programme Python pour trouver toutes les lignes où foo , mais pas bar , est transmis dans une méthode de mot-clé. Je joue avec des assertions de regard sur la lunette et des regards, mais pas d'avoir beaucoup de chance.

Toute aide?

merci


0 commentaires

3 Réponses :


14
votes

Si vous avez une chaîne FOO code> que vous souhaitez trouver et une autre chaîne bar code> qui ne doit pas être présente, vous pouvez utiliser ceci:

^(?!.*bar).*foo


2 commentaires

Je suis assez confiant que toutes les occurrences sont sur la même ligne et, si cela me manque, cela n'a pas d'importance. Je viens de mentionner Python pour donner un certain contexte.


@Zach, quelle marque signifiait que la chaîne la barre pourrait se produire sans être un mot clé (ou avez-vous voulu dire identifiant?): Cela pourrait être dans un littéral ou une partie d'un commentaire.



4
votes

avoir le ^ code> après em> les lookaheads de ces scénarios semble toujours fonctionner mieux pour moi. Lire cela a plus de sens pour moi aussi.

(?!. * Bar) ^. * FOO CODE> P>

this has a foo          # pass
so does this has a foo  # pass
i can haz foo           # pass
but i haz foo and bar!  # fail


3 commentaires

Pourriez-vous poster une chaîne qui fonctionne "mieux" lors de la mise en place du ^ après cela au lieu d'avant?


Merci ... + 1 mais vous avez battu à l'heure


Gros accessoires pour cela, Python Regex frustrant résolu. Essayait de trouver tous les fichiers d'un certain nom, mais excluez tous les fichiers de sauvegarde TILDE. (?!. * ~) ^. * FileName.ext



1
votes

Vous pouvez également le faire avec non une regex: xxx


2 commentaires

Je cherche de nombreux fichiers, il est donc beaucoup plus facile de simplement utiliser un outil qui prend une expression régulière et gère la traversée des fichiers pour moi. Merci quand même


Avec certitude. J'aime les regextes et les utiliser quotidiennement. Il vaut juste la peine de garder à l'esprit que parfois, vous devriez simplement dire au programme exactement ce que vous voulez et vous sauver un mal de tête. ;)