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: p>
Étant donné une ligne disant: Je veux dire trouver FileName.txt qui n'a pas d'option3. P>
J'ai utilisé: Je n'aime pas comment cela se lit, mais les coutures la seule technique qui pourrait fonctionner p> FileName.txt Opt2 Opt2 Opt4 Code> P>
^ (?!. * Opt3). * FileName.txt. * code> p> p>
3 Réponses :
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: Vous pouvez également faire cela en utilisant deux Appels vers re.search code>, par exemple p>
Peut-être, pourrait simplement suffire. p> Juste au cas où , serait une option pour examiner, aussi bien. p> JEX.IM visualise des expressions régulières: p> Demo 1 H3>
filename.txt code> ne serait pas au début de la chaîne, puis p> Demo 2 H3>
Circuit de regex
Test 1 h3>
['filename.txt opt1 opt2 opt4', ' filename.txt opt1 opt2 opt4']
filename.txt opt1 opt2 opt4
filename.txt opt1 opt2 opt4
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.
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 à p> voir un 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 p> Démo Regex P> P>
^ code> début de chaîne li>
(?! code> lookahead négatif, affirmer ce qui est sur la droite n'est pas
. * code> correspond à n'importe quel caractère sauf une nouvelle ligne 0+ fois li>
(? Match Opt3 code> non entouré de caractères non blancheurs li>
ul> li>
) code> Fermer Lookahead li>
nom de fichier \ .txt code> correspondez littéralement li>
ul>
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.
Cela vous posera un problème si
nom de fichier code> comprendopt3 code>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