Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.regexp > #157

[RÉSOLU] Vérifier la présence d'un mot dans tous les champs

From Olivier Miakinen <om+news@miakinen.net>
Newsgroups fr.comp.lang.regexp
Subject [RÉSOLU] Vérifier la présence d'un mot dans tous les champs
Date 2022-04-05 17:28 +0200
Organization There's no cabale
Message-ID <t2hn6e$2qb0$1@cabale.usenet-fr.net> (permalink)
References <t0lcik$1616$1@cabale.usenet-fr.net> <t0lgks$192t$1@cabale.usenet-fr.net> <t0o822$2mlv$1@cabale.usenet-fr.net>

Show all headers | View raw


Bonjour,

Après vérifications et tests, je confirme que les deux regexp trouvées
fonctionnent comme prévu. Afin que ce groupe conserve un rôle pédago-
gique voici une explication pour chacune.


>>> Dans une phrase comportant plusieurs mots séparés entre autres par des
>>> virgules, je voudrais vérifier qu'un mot en particulier se trouve dans
>>> chaque partie de la phrase.
> 
> La regexp suivante semble convenir :
>     /^[^,]*cœur[^,]*(,[^,]*cœur[^,]*)*$/

On peut décomposer cette regexp en : /^RE(,RE)*$/
avec : RE=[^,]*cœur[^,]*

Chaque RE correspond à une chaîne de caractères sans aucune virgule
mais contenant au moins une fois le mot cœur.

Quand au test global, il vérifie qu'il y a bien une sous-chaîne de
type RE au début, puis qu'à chaque fois qu'on rencontre une virgule
celle-ci est suivi d'une autre sous-chaîne de type RE, et ce jusqu'à
la fin.


>> [...] ma
>> question d'origine qui est le contraire : vérifier qu'il existe au
>> moins l'une des parties de la phrase ne contenant *pas* ce mot.
> 
> Pour cette version, la regexp suivante a l'air d'aller :
>     /(^|,)([^,](?!cœur))*(,|$)/

Ici, le cœur (sic) de la regexp peut s'écrire :
 /(^|,)([^,])*(,|$)/
voire, encore plus simplement :
 /(^|,)[^,]*(,|$)/

Cette regexp consiste à considérer indépendamment chaque sous-chaîne
délimitée soit par des virgules, soit par le début ou la fin de la
chaîne.
 - à gauche, le début de la chaîne ou une virgule : (^|,)
 - à droite, une virgule ou la fin de la chaîne : (,|$)
 - entre les deux, une séquence de caractères sans virgules : [^,]*

Mais en outre on veut vérifier que nulle part à l'intérieur de cette
sous-chaîne on ne rencontre le mot cœur. Ceci est réalisé par une
assertion à chaque non-virgule (à chaque [^,]) pour vérifier qu'à
cet endroit là ce n'est pas suivi par le mot cœur : (?!cœur).

Le test complet « il y a un caractère qui n'est pas une virgule et
qui n'est pas suivi par le mot cœur » est : ([^,](?!cœur))

Il n'y a plus qu'à le répéter n fois (multiplicateur *) et à
l'insérer entre le test de début et le test de fin de sous-chaîne.


Et voilà ! Encore merci à Otomatic, et à une prochaine fois pour de
nouvelles aventures regexpiennes.

-- 
Olivier Miakinen

Back to fr.comp.lang.regexp | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Vérifier la présence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-03-13 19:18 +0100
  Re: Vérifier la présence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-03-13 20:28 +0100
    Re: Vérifier la présence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-03-14 21:20 +0100
      [RÉSOLU] Vérifier la présence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-04-05 17:28 +0200
  Re: Vérifier la présence d'un mot dans tous les champs Otomatic <otomatic@oto.invalid> - 2022-03-14 10:21 +0100
    Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-03-14 10:47 +0100
      Re: Verifier la presence d'un mot dans tous les champs Otomatic <otomatic@oto.invalid> - 2022-03-14 17:06 +0100
        Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-03-14 18:08 +0100
      Re: Verifier la presence d'un mot dans tous les champs Dominique <zzz@aol.com.invalid> - 2022-06-11 06:35 +0200
        Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2022-06-11 10:48 +0200
          Re: Verifier la presence d'un mot dans tous les champs "Benoît L." <benoit@leraillez.com.invalid> - 2023-02-28 13:26 +0000
            Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-02-28 14:40 +0100
              Re: Verifier la presence d'un mot dans tous les champs "Benoît L." <benoit@leraillez.com.invalid> - 2023-02-28 14:33 +0000
                Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-02-28 19:06 +0100
                Re: Verifier la presence d'un mot dans tous les champs "Benoît L." <benoit@leraillez.com.invalid> - 2023-02-28 22:12 +0000
                Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-02-28 23:50 +0100
                Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-02-28 23:59 +0100
                Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-03-01 00:04 +0100
                Re: Verifier la presence d'un mot dans tous les champs Olivier Miakinen <om+news@miakinen.net> - 2023-03-01 00:15 +0100
                Re: Verifier la presence d'un mot dans tous les champs "Benoît L." <benoit@leraillez.com.invalid> - 2023-03-01 00:03 +0000
                Re: Verifier la presence d'un mot dans tous les champs andre_favre@af.invalid (André Favre) - 2023-03-01 09:27 +0100
                Re: Verifier la presence d'un mot dans tous les champs "Benoît L." <benoit@leraillez.com.invalid> - 2023-03-01 10:29 +0000
                Re: Verifier la presence d'un mot dans tous les champs andre_favre@af.invalid (André Favre) - 2023-03-01 17:36 +0100
                Re: Verifier la presence d'un mot dans tous les champs "M.V." <mv@gmail.com.invalid> - 2023-03-02 09:29 +0000

csiph-web