Jolie astuce en RegEx (merci ChatGPT)

J'utilise régulièrement des IA, avec plus ou moins de bonheur. Et, de temps en temps, ça m'enseigne une astuce que j'aurai eu du mal à trouver autrement. Par exemple si j'avais utilisé un moteur de recherche. Ou pire, mon cerveau(*).


Dernièrement, je cherchais un moyen simple de mettre en valeur un motif dans un texte. Classiquement, si je cherche le mot "Metal" dans mes fichiers "*.txt", j'utilise

    grep --color "Metal" *.txt

Mais là je voulais en plus afficher les lignes qui ne contiennent pas le motif. Je ne savais pas comment faire ça de manière simple. Et ChatGPT m'a proposé cette astuce (après simplification), que je trouve super élégante

    grep --color "^|Metal" *.txt

Toute l'astuce réside dans l'utilisation du '^' (pour début de ligne) combiné avec un ou (|). Le '^' match tout mais sans rien mettre en couleur.


Comme toujours, une fois qu'on a la réponse il est facile de voir que :
  1. C'était évident.
  2. Ça n'était pas si difficile à trouver.
  3. Heu... nan... mais en fait j'le savais déjà...
Ouaip. Mais ça c'est quand on a la réponse. Sans ChatGPT je pense qu'il m'aurait fallu 3 à 4 itérations sur un moteur de recherche. Là, en une question c'était plié, je vous mets l'image.





Étrangement, Google Gemini répond un peu à côté de la plaque sur la même question. La réponse fausse de Gémini est celle-ci (après simplification)

    grep --color -e 'Metal' *.txt

Une réponse correcte dans le même esprit serait (toujours après simplification)

    grep --color -e 'Metal' -e '^' *.txt

Cette construction est quasi-équivalente à celle de ChatGPT. Et peut être même plus jolie car elle évite l'usage explicite du ou (|). 


Là aussi, une fois la réponse sous les yeux on s'aperçoit que c'était parfaitement évident. Bien entendu.



(*) Ce foutoir là-dedans, on dirait mon garage !

Attaquer la falaise

Récemment je vous parlais des mots-croisés RegEx.

Je m'étais mis en tête de grimper jusqu'au Top 50 et puis de passer à autre chose. Ouaip. C'était compter sans l'empire d'addiction que ce jeu exerce sur moi.

Dans mon billet précédent je vous conseillais d'y jouer. N'EN FAITES RIEN ! C'est de la demer! Pire qu'une drogue. Pire que le combo fentanyl / crack / viagra / vitamine C / gelée de framboise(*).

La difficulté devient exponentielle, chaque niveau nécessitant de résoudre des puzzles de plus en plus difficiles (et intéressants !). Pire, là où j'en suis maintenant il y a une véritable falaise à gravir.

Je vous ai fait un graphique basé sur le classement du jour. En abscisse vous avez le rang. En ordonnée le nombre de puzzles à résoudre. La ligne pointillée c'est moi. Et la falaise ce sont les 50 p*t'1n de puzzles à résoudre pour passer de 29ième à 28ième.

Jusqu'à maintenant j'arrivais à progresser sans trop trop de douleur... Mais là je deviens dingue avec ce truc... J'ai bien peur qu'il faille mettre le cerveau en route... Je vais tenter le coup vite vite... avant que les mecs en blanc ne reviennent m'attacher les mains dans le dos... et me refaire des piqures qui rendent nigaud.... vite... vite...


Classement sur RegEx crosswords et falaise à gravir pour passer de 29 à 28.


(*) Pour le goût.

 Au chateaux en Espagne,
J'ai toujours préféré,
Les palais bretons.

(Image Creative Commons sur https://i0.wp.com/)