-1
votes

Regex positif et négatif en python

J'utilise des expressions de regèges à Python pendant un moment et je souhaite savoir s'il est possible de demander à RegEx de faire correspondre une ligne qui a une valeur dans la ligne mais n'a pas non plus de valeur dans la même ligne:

Étant donné une ligne disant: FileName.txt Opt2 Opt2 Opt4

Je veux dire trouver FileName.txt qui n'a pas d'option3.

J'ai utilisé: ^ (?!. * Opt3). * FileName.txt. *

Je n'aime pas comment cela se lit, mais les coutures la seule technique qui pourrait fonctionner


3 commentaires

Cela vous posera un problème si nom de fichier comprend opt3


Cela n'a pas fonctionné pour moi. re.search ('' FileName.abc 0 Opt1 Opt2 Opt4 'Opt4', '^ (?!. * Opt3) Nom de fichier \ .abc')! = Aucun


Cela n'a pas fonctionné non plus. re.search ('FileName.abc 0 Opt1 Opt2 Opt4', '^ (?!. * Opt3). * (nom de fichier \ anabc)')! = Aucun


3 Réponses :


0
votes

Si vous voulez une seule regex, votre approche est de savoir comment je ferais cela, mais vous devriez placer les limites de mots autour des différents termes: xxx

Vous pouvez également faire cela en utilisant deux Appels vers re.search , par exemple xxx


0 commentaires

1
votes

Peut-être, xxx pré>

pourrait simplement suffire. p>

Demo 1 H3>

Juste au cas où , filename.txt code> ne serait pas au début de la chaîne, puis p> xxx pré>

serait une option pour examiner, aussi bien. p>

Demo 2 H3>

Circuit de regex

JEX.IM visualise des expressions régulières: p>

 Entrez la description de l'image ici p>

Test 1 h3>
['filename.txt  opt1 opt2 opt4', ' filename.txt  opt1 opt2 opt4']
filename.txt  opt1 opt2 opt4
 filename.txt  opt1 opt2 opt4


1 commentaires

intéressant que re.findall () le trouve, mais il nécessite le 3ème paramètre et le moment Sinon, il renvoie une liste vide. Re.Search () ne le trouvera pas du tout.



1
votes

Dans le code que vous avez essayé dans les commentaires, le premier argument de RE.Search est le modèle et le deuxième argument est la chaîne.

Votre code peut ressembler à xxx

voir un Démo Python

Si le ne doit pas être OPT3 dans la chaîne mais Opt3 peut faire partie d'une plus grande chaîne, vous Pourrait utiliser les regards de surveillance pour s'assurer que Opt3 n'est pas entouré de caractères non blancheurs xxx

  • ^ début de chaîne
  • (?! lookahead négatif, affirmer ce qui est sur la droite n'est pas
    • . * correspond à n'importe quel caractère sauf une nouvelle ligne 0+ fois
    • (? Match Opt3 non entouré de caractères non blancheurs
    • ) Fermer Lookahead
    • nom de fichier \ .txt correspondez littéralement

      Démo Regex


2 commentaires

Ok ... je vois maintenant ... Fondamentalement, cette réponse est la plus simple et montre la chaîne correcte dans la recherche (). Mon texte original avait un personnage supplémentaire .. si proche ty.


@Keith vous êtes les bienvenus.