85 votes

Comment faire correspondre une ligne ne contenant pas un mot

Je me demandais comment faire correspondre une ligne ne contenant pas d'un mot spécifique à l'aide de Python-style Regex (il suffit d'utiliser la Regex, impliquent pas de fonctions Python)?

Exemple:

PART ONE OVERVIEW 1 
Chapter 1 Introduction 3

Je veux correspondre les lignes qui ne contiennent pas le mot "PARTIE"?

Merci et salutations!

169voto

Justin Morgan Points 12853

Cela devrait fonctionner:

/^((?!PART).)*$/

Si vous ne voulait l'exclure du début de la ligne (je sais que vous ne le faites pas, mais juste pour info), vous pouvez utiliser ceci:

/^(?!PART)/

Edit (par demande): Pourquoi ce modèle fonctionne

L' (?!...) syntaxe est une anticipation négatif, que j'ai toujours trouvé difficile à expliquer, mais, fondamentalement, cela signifie "tout ce qui suit ce point ne doit pas correspondre à l'expression régulière /PART/." Le site que j'ai lié explique bien mieux que je peux, mais je vais essayer de briser ce bas:

^         #Start matching from the beginning of the string.    
(?!PART)  #This position must not be followed by the string "PART".
.         #Matches any character except a line break (\n or \r). There are ways to make it match those as well.
$         #Match all the way until the end of the string.

L' ((?!xxx).)* idiome est probablement le plus difficile à comprendre. Comme nous l'avons vu, (?!PART) regarde la chaîne d'avance et dit que tout ce qui s'en vient ne peut pas correspondre à la parenthèse /PART/. Donc, ce que nous faisons avec l' ((?!xxx).)* est en passant par la chaîne de lettre par lettre et à l'application de la règle à tous. Chaque personnage peut être rien, mais si vous prenez le personnage et les quelques caractères après cela, vous feriez mieux de ne pas obtenir le mot de la PARTIE.

L' ^ et $ ancres sont là pour exiger que la règle s'applique à l'ensemble de la chaîne, du début à la fin. Sans ces ancrages, n'importe quel morceau de la chaîne qui ne commence pas avec la PARTIE allait être un match. Même PARTIE lui-même aurait des correspondances dans les, parce que (par exemple) la lettre A n'est pas suivie par la chaîne de caractères exacte de la PARTIE.

Puisque nous avons ^ et $, si la PARTIE ont été n'importe où dans la chaîne, l'un des personnages correspondent (?=PART). et l'ensemble du match serait un échec. J'espère que c'est suffisamment clair pour être utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X