Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.regexp > #233 > unrolled thread
| Started by | yamo' <news@pasdenom.info> |
|---|---|
| First post | 2024-12-07 20:12 +0100 |
| Last post | 2024-12-09 12:16 +0100 |
| Articles | 16 — 7 participants |
Back to article view | Back to fr.comp.lang.regexp
Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info> - 2024-12-07 20:12 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace Jo Engo <yl@icite.fr> - 2024-12-08 10:07 +0000
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 13:09 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info > - 2024-12-09 08:03 +0000
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-09 12:34 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace DV <dv@reply-to.not.invalid> - 2024-12-09 12:50 +0000
Re: Regex qui supprime tout le reste de la ligne après le premier espace Otomatic <otomatic@oto.invalid> - 2024-12-09 18:08 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-10 02:29 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <yamo@beurdin.invalid> - 2024-12-11 17:15 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <yamo@beurdin.invalid> - 2024-12-11 17:16 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace Jo Engo <yl@icite.fr> - 2024-12-14 20:51 +0000
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-14 22:48 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 13:29 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 14:01 +0100
Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info > - 2024-12-09 07:52 +0000
Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-09 12:16 +0100
| From | yamo' <news@pasdenom.info> |
|---|---|
| Date | 2024-12-07 20:12 +0100 |
| Subject | Regex qui supprime tout le reste de la ligne après le premier espace |
| Message-ID | <AABnVJ4ChAMAADSd.A3.flnews@yamo.pasdenom.info> |
Salut, Je suis nul en regex et j'ai besoin d'une regex qui supprime tout le reste d'une ligne après le premier espace sauf si la ligne commence par ':' : En entrée : :fr.* (hiérarchie francophone) fr.bienvenue Aide aux nouveaux venus dans leurs premiers pas sur Usenet. fr.bio.medecine Discussions sur la médecine. En sortie : :fr.* (hiérarchie francophone) fr.bienvenue fr.bio.medecine Précision, il n'y a pas de lignes vides. Merci d'avance! -- Stéphane
[toc] | [next] | [standalone]
| From | Jo Engo <yl@icite.fr> |
|---|---|
| Date | 2024-12-08 10:07 +0000 |
| Message-ID | <vj3r5a$i63$19@rasp.pasdenom.info> |
| In reply to | #233 |
Le Sat, 7 Dec 2024 20:12:02 +0100, yamo' a écrit : > Je suis nul en regex Moi aussi, mais généralement je les comprends, et je peux faire des simples. Testé : sed '/^:/!s/ .*$//' fichier.txt semble faire le job, mais ce n'est pas moi qui l'ai écrit :o) -- RÉALISME M : Qu'est-ce qu'il nous faudrait pour qu'on nous considère comme des humains ? Un cerveau plus gros ? P : Non... Une carte bleue suffirait...
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-08 13:09 +0100 |
| Message-ID | <vj429n$1976$1@cabale.usenet-fr.net> |
| In reply to | #234 |
Le 08/12/2024 11:07, Jo Engo répondait à yamo' : > >> Je suis nul en regex > > Moi aussi, mais généralement je les comprends, et je peux faire des > simples. Testé : > > sed '/^:/!s/ .*$//' fichier.txt > > semble faire le job, mais ce n'est pas moi qui l'ai écrit :o) Et en l'occurrence cette commande sed utilise non pas une mais deux regex. La première regex cherche quelles lignes commencent par un ':' : /^:/ Puis on exclut ces lignes : ! Et enfin on effectue la substitution par une seconde regex sur les lignes restantes : s/ .*$// (noter que le '$' est inutile même s'il ne gêne pas) Je vais maintenant chercher à répondre à la question par une seule regex, en supposant que le moteur est compatible perl (PCRE). -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | yamo' <news@pasdenom.info > |
|---|---|
| Date | 2024-12-09 08:03 +0000 |
| Message-ID | <vj688q$bq6$1@rasp.pasdenom.info> |
| In reply to | #234 |
Salut, Jo Engo a écrit : > Le Sat, 7 Dec 2024 20:12:02 +0100, yamo' a écrit : >> Je suis nul en regex > Moi aussi, mais généralement je les comprends, et je peux faire des > simples. Testé : > sed '/^:/!s/ .*$//' fichier.txt > semble faire le job, mais ce n'est pas moi qui l'ai écrit :o) Pour moi c'est, à l'exception des plus simples, presque aussi obscur que du mandarin... Surtout que j'ai le souvenir que par exemple ^ a plusieurs significations... Et je les ai pris en grippe dès le départ. Je vais essayer dans la semaine et je donnerai mon retour d'expérience ! -- Stéphane
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-09 12:34 +0100 |
| Message-ID | <vj6kjn$281a$1@cabale.usenet-fr.net> |
| In reply to | #239 |
Le 09/12/2024 09:03, yamo' a écrit : > >> sed '/^:/!s/ .*$//' fichier.txt > >> semble faire le job, mais ce n'est pas moi qui l'ai écrit :o) > > Pour moi c'est, à l'exception des plus simples, presque aussi obscur que du > mandarin... J'ai expliqué cette commande sed dans ma réponse à Jo Engo. > Surtout que j'ai le souvenir que par exemple ^ a plusieurs significations... Il y a en tout et pour tout deux contextes dans les regexp, à savoir le contexte global ou celui des classes de caractères (entre crochets []). Dans le contexte global, ^ désigne le début de la ligne ou le début du texte. Tandis qu'au tout début d'une classe de caractères cela signifie « NON » : [0-9] c'est n'importe quel chiffre entre 0 et 9, alors que [^0-9] c'est n'importe quel caractère sauf un chiffre entre 0 et 9. > Et je les ai pris en grippe dès le départ. Avec un peu d'aide de ma part, DV a rédigé une doc pour les débutants que je trouve particulièrement claire et accessible. Elle est très orientée pour le logiciel MacCafé, mais elle reste pertinente dans la plupart des autres cas (particulièrement pour PCRE) et me semble facile à lire. Voir <http://mc.yakakwatik.org/regex/fr/>. -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | DV <dv@reply-to.not.invalid> |
|---|---|
| Date | 2024-12-09 12:50 +0000 |
| Message-ID | <vj6p2t$a3k$1@rasp.pasdenom.info> |
| In reply to | #241 |
Olivier Miakinen a écrit ceci : > Avec un peu d'aide de ma part, DV a rédigé une doc pour les débutants Un peu ? ;-) -- Denis USENET FRANCOPHONE (serveurs, passerelles, groupes, lecteurs de news, docs) : <http://usenet-fr.yakakwatik.org>
[toc] | [prev] | [next] | [standalone]
| From | Otomatic <otomatic@oto.invalid> |
|---|---|
| Date | 2024-12-09 18:08 +0100 |
| Message-ID | <sp8eljhf8hav2s9i6rfn08mtrn196uufd6@4ax.com> |
| In reply to | #241 |
Olivier Miakinen <om+news@miakinen.net> écrivait : > Avec un peu d'aide de ma part, DV a rédigé une doc pour les débutants que je > trouve particulièrement claire et accessible. Elle est très orientée pour > le logiciel MacCafé, mais elle reste pertinente dans la plupart des autres > cas (particulièrement pour PCRE) et me semble facile à lire. > > Voir <http://mc.yakakwatik.org/regex/fr/>. Je n'utilise pas les regex tous les jours, donc après un certain temps, la mémoire fait défaut et alors je consulte documentation PHP sur le sujet - PCRE : https://www.php.net/manual/fr/pcre.pattern.php Nota : Olivier m'avait donné beaucoup d'aide dans ce même forum.
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-10 02:29 +0100 |
| Message-ID | <vj85hq$2oj6$1@cabale.usenet-fr.net> |
| In reply to | #243 |
Le 09/12/2024 18:08, Otomatic m'a répondu : >> >> Voir <http://mc.yakakwatik.org/regex/fr/>. > > https://www.php.net/manual/fr/pcre.pattern.php Exactement. La première doc est parfaite pour débuter, et la seconde est parfaite comme page de référence quand on cherche à répondre à une question spécifique. -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | yamo' <yamo@beurdin.invalid> |
|---|---|
| Date | 2024-12-11 17:15 +0100 |
| Message-ID | <vjcdqb$9du$1@rasp.pasdenom.info> |
| In reply to | #244 |
Salut, Olivier Miakinen a tapoté le 10/12/2024 02:29: > Le 09/12/2024 18:08, Otomatic m'a répondu : >>> >>> Voir <http://mc.yakakwatik.org/regex/fr/>. >> >> https://www.php.net/manual/fr/pcre.pattern.php > > Exactement. La première doc est parfaite pour débuter, et la seconde est > parfaite comme page de référence quand on cherche à répondre à une question > spécifique. > Merci, je vais d'abord lire tranquillement la première... -- Stéphane <http://pasdenom.info/news.html>
[toc] | [prev] | [next] | [standalone]
| From | yamo' <yamo@beurdin.invalid> |
|---|---|
| Date | 2024-12-11 17:16 +0100 |
| Message-ID | <vjcdsc$9du$2@rasp.pasdenom.info> |
| In reply to | #234 |
Salut, Jo Engo a tapoté le 08/12/2024 11:07: > sed '/^:/!s/ .*$//' fichier.txt Ça fonctionne parfaitement! -- Stéphane <http://pasdenom.info/news.html>
[toc] | [prev] | [next] | [standalone]
| From | Jo Engo <yl@icite.fr> |
|---|---|
| Date | 2024-12-14 20:51 +0000 |
| Message-ID | <vjkr4j$pdl$3@rasp.pasdenom.info> |
| In reply to | #246 |
Le Wed, 11 Dec 2024 17:16:12 +0100, yamo' a écrit : > Ça fonctionne parfaitement! Il faut dire merci à ChatGPT, quoiqu'il est vrai que ce sont 2 regex et non une. -- Il faut pleurer les hommes à leur naissance et non pas à leur mort. -+- Montesquieu -+-
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-14 22:48 +0100 |
| Message-ID | <vjkuf8$13f4$1@cabale.usenet-fr.net> |
| In reply to | #247 |
Le 14/12/2024 21:51, Jo Engo a écrit : > >> Ça fonctionne parfaitement! > > Il faut dire merci à ChatGPT, quoiqu'il est vrai que ce sont 2 regex et > non une. Il s'agissait de : sed '/^:/!s/ .*$//' fichier.txt Et grâce à cela j'ai découvert le « ! » après la première regex, syntaxe de sed que je ne connaissais pas. Sans la connaitre, j'aurais donc écrit : sed '/^[^:]/s/ .*$//' fichier.txt -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-08 13:29 +0100 |
| Message-ID | <vj43g8$19ln$1@cabale.usenet-fr.net> |
| In reply to | #233 |
Le 07/12/2024 20:12, yamo' a écrit : > > Je suis nul en regex et j'ai besoin d'une regex qui supprime tout > le reste d'une ligne après le premier espace > sauf si la ligne commence par ':' : > > En entrée : > > :fr.* (hiérarchie francophone) > fr.bienvenue Aide aux nouveaux venus dans leurs premiers pas sur Usenet. > fr.bio.medecine Discussions sur la médecine. > > En sortie : > > :fr.* (hiérarchie francophone) > fr.bienvenue > fr.bio.medecine 1re solution sans assertions ============================ Remplacer : /^([^:][^ ]*?) .*/ par : \1 Attention, selon ton type de regex il faudra peut-être écrire \( et \) à la place de ( et ), ou (inclusif) écrire $1 au lieu de \1. 2e solution avec assertions =========================== Remplacer : /(?<=^[^:][^ ]*?) .*/ par rien. -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-08 14:01 +0100 |
| Message-ID | <vj45br$1aii$1@cabale.usenet-fr.net> |
| In reply to | #236 |
Le 08/12/2024 13:29, j'écrivais : > > 1re solution sans assertions > ============================ > > Remplacer : > /^([^:][^ ]*?) .*/ > par : > \1 Cette 1re solution peut convenir si ton moteur de regex n'est pas de type PCRE. > Attention, selon ton type de regex il faudra peut-être écrire \( et \) à > la place de ( et ), ou (inclusif) écrire $1 au lieu de \1. N'étant pas de type PCRE, il y a différentes « saveurs » de regex, d'où les différences possibles. > 2e solution avec assertions > =========================== > > Remplacer : > /(?<=^[^:][^ ]*?) .*/ > par rien. Cette 2de solution est pour les regex de type PCRE. -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | yamo' <news@pasdenom.info > |
|---|---|
| Date | 2024-12-09 07:52 +0000 |
| Message-ID | <vj67ja$an7$1@rasp.pasdenom.info> |
| In reply to | #237 |
Salut, Merci à vous deux ! Olivier Miakinen a écrit : > Le 08/12/2024 13:29, j'écrivais : >> >> 1re solution sans assertions >> ============================ >> >> Remplacer : >> /^([^:][^ ]*?) .*/ >> par : >> \1 Seulement ? > Cette 1re solution peut convenir si ton moteur de regex n'est pas de type PCRE. Encore un truc qui me rebute avec les regex mais c'est une des joies de l'informatique où chacun peut développer sa norme dans son coin... >> Attention, selon ton type de regex il faudra peut-être écrire \( et \) à >> la place de ( et ), ou (inclusif) écrire $1 au lieu de \1. Quand je comprends ce que je fais, j´échappe les caractères "spéciaux". > N'étant pas de type PCRE, il y a différentes « saveurs » de regex, d'où les > différences possibles. C'est un monde étrange ces regex... >> 2e solution avec assertions >> =========================== >> >> Remplacer : >> /(?<=^[^:][^ ]*?) .*/ >> par rien. !? > Cette 2de solution est pour les regex de type PCRE. Je vais regarder la solution de Jo Engo si elle fonctionne. Avant de peut-être un jour l'appliquer avec sed ou perl (-E ou -P?), je vais probablement utiliser un clickodrome comme BlueFish avant de copier le résultat sur le serveur... Je sais qu'on peut directement les utiliser dans vim* mais je ne sais pas si je vais atteindre le niveau de confiance suffisant... * je n'ai pas regardé si nano est aussi puissant à ce niveau là. -- Stéphane
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2024-12-09 12:16 +0100 |
| Message-ID | <vj6jjh$27hh$1@cabale.usenet-fr.net> |
| In reply to | #238 |
Le 09/12/2024 08:52, yamo' a écrit :
> Salut,
> Merci à vous deux !
> Olivier Miakinen a écrit :
>> Le 08/12/2024 13:29, j'écrivais :
>>>
>>> 1re solution sans assertions
>>> ============================
>>>
>>> Remplacer :
>>> /^([^:][^ ]*?) .*/
>>> par :
>>> \1
>
> Seulement ?
Oui.
Ça veut dire la chose suivante :
^ Commencer au début de la ligne
([^:][^ ]*?) Tout ce bloc sera capturé. Je le décris en détail en dessous
[^:] Le premier caractère ne doit pas être un deux-points
[^ ]*? Les caractères suivants ne doivent pas être des espaces
(espace).* Là on prend une espace puis tout ce qui suit jusqu'à la fin
Donc, d'après ce qui précède, si une ligne ne commence pas par un deux-points,
tous les premiers caractères sans espaces sont capturés par les parenthèses
(...), et à partir de la première espace c'est pris en compte mais pas capturé.
Du coup, quand on le remplace par $1 ou \1, cela veut dire qu'on ne recopie que
ce qui avait été capturé par les parenthèses.
>> Cette 1re solution peut convenir si ton moteur de regex n'est pas de type PCRE.
>
> Encore un truc qui me rebute avec les regex mais c'est une des joies de
> l'informatique où chacun peut développer sa norme dans son coin...
C'est surtout une raison historique. Au début les regexp n'étaient pas très
évoluées et on ne savait pas capturer avec des parenthèses, c'étaient donc
des caractères sans signification. Quand on a pensé à capturer avec des
parenthèses, ceux qui ont développé les regex améliorées ont préféré aller
au plus simple et écrire (...) pour la capture, ce qui force à écrire \( et
\) pour les protéger si on veut en faire des caractères normaux. Au contraire
dans les premières regex, pour garder la compatibilité avec l'existant on a
gardé ( et ) pour les caractères normaux et il a fallu écrire \(...\) pour
en faire des parenthèses capturantes.
Lorsque tout le monde sera passé au meilleur standard possible, à savoir PCRE
qui est devenu la norme dans tous les nouveaux langages, on ne se posera plus
de question. C'est un problème récurrent, comme les différents charsets
nationaux (CP850, CP1252, ISO-8859-1, ISO-8859-15, Shift-JIS, etc.) qui sont
de plus en plus souvent remplacés par UTF-8.
>>> Attention, selon ton type de regex il faudra peut-être écrire \( et \) à
>>> la place de ( et ), ou (inclusif) écrire $1 au lieu de \1.
>
> Quand je comprends ce que je fais, j´échappe les caractères "spéciaux".
>
>> N'étant pas de type PCRE, il y a différentes « saveurs » de regex, d'où les
>> différences possibles.
>
> C'est un monde étrange ces regex...
cf. supra.
>>> 2e solution avec assertions
>>> ===========================
>>>
>>> Remplacer :
>>> /(?<=^[^:][^ ]*?) .*/
>>> par rien.
>
> !?
>
>> Cette 2de solution est pour les regex de type PCRE.
>
> Je vais regarder la solution de Jo Engo si elle fonctionne.
Oui, elle fonctionne parfaitement si tu dois transformer un fichier depuis un
shell plutôt que de faire la manip dans un programme en C/PHP/Python/whatever.
Il se trouve simplement qu'elle enchaîne deux regex au lieu d'une, comme je
l'ai expliqué dans ma réponse à son article. Vu que tu n'avais pas dit dans
quel contexte tu voulais utiliser une (ou plusieurs) regex, c'est pour ça que
j'ai donné plusieurs solutions.
--
Olivier Miakinen
[toc] | [prev] | [standalone]
Back to top | Article view | fr.comp.lang.regexp
csiph-web