Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.regexp > #157
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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