Pour résumer, voici en image ce que l’on a initialement

et le résultat que l’on souhaite à l’arrivée :

Pour continuer en image (je suis un peu féniant ce matin), une capture d’écran du panneau Rechercher/Remplacer montrant l’expression régulière utilisée :

Quelques mots d’explication tout de même. L’idée est de sélectionner les deux lignes dont la première lettre en majuscule diffère, puis d’insérer entre elles la lettre majuscule de la ligne “du dessus”.

Au coeur de cette expression régulière, deux choses :

  1. Des sous-expressions marquantes, qui permettent de rappeler dans le champ “Remplacer par” une chaîne placée entre parenthèses dans le champ “Rechercher”, et ce à l’aide d’une variable de type “Trouvé” ($1, $2, $3…);
  2. Une “référence arrière” symbolisée par une barre oblique inverse et un chiffre : \1.

Qu’est-ce qu’un référence arrière ? Un peu à l’image de la variable “Trouvé”, la référence arrière (qui est absente du menu déroulant du panneau R/R) rappelle une chaîne groupée dans une sous-expression marquante qui la précède directement dans la regex du champ “Rechercher”. Par exemple, l’expression (le)_\1 (où l’underscore représente une espace) recherche l’article “le” suivi d’une espace et du même article “le”.

Revenons à notre cas pratique. L’expression régulière du champ “Rechercher” se divise en deux :

  1. La première partie permet de sélectionner la première ligne (du dessus). Plus exactement, on recherche n’importe quel caractère présent une ou plusieurs fois jusqu’à la marque de fin de paragraphe incluse (.+\r) ; à la condition d’être précédé d’une lettre majuscule placée en début de paragraphe (?<=^(\u)). 
  2. La deuxième partie s’intéresse à la deuxième ligne, et simplement même à son premier caractère. On recherche en fait une lettre capitale (\u) qui n’est pas précédée en début de phrase de la même lettre capitale de la première ligne (?!^\1). Ce lookahead négatif est indispensable pour justement prendre en compte uniquement les lignes dont la première lettre est différente.
La même chose en cliquant sur le bouton “Rechercher”
Nos lignes sélectionnées, il convient maintenant d’insérer entre elles la lettre de l’alphabet correspondant. Dans cette phase tout repose sur les variables de type “Trouvé”. Nous avons ici trois sous-expressions marquantes.
  1. La première (\u) vise la majuscule de la première ligne et se trouve insérée dans le lookbehind du début de regex ; le “Trouvé ” correspondant est $1 ;
  2. La seconde (.+\r) concerne tout ce qui suit la majuscule de la première ligne ; le “Trouvé” est symbolisé par $2 ;
  3. La troisième (\u) sélectionne la majuscule de la deuxième ligne ; le “Trouvé” est ici $3.

  

Donc, l’expression régulière du champ “Remplacer par”, commence par “recopier” toute la première ligne $2 (sauf la majuscule), ajoute ensuite une marque de paragraphe \r, insère la majuscule de la deuxième ligne $3, puis deux marques de paragraphes \r\r, pour terminer par “recopier” la même majuscule de deuxième ligne $3.

Et le tour est joué. Cependant, cette regex a ses limites :

  1. Il vous faudra rentrer manuellement la première lettre de l’alphabet, ce qui est logique puisque la première ligne de la liste n’à pas de référent ;
  2. Si des capitales accentuées figurent dans la liste, ces majuscules seront intégrées ;
  3. Si une lettre de l’alphabet ne contient qu’une seule entrée, elle est ignorée. Il vous faudra donc insérer la lettre correspondant.
Malgré ces inconvénients, cette expression régulière peut aider à automatiser cette tâche laborieuse consistant à insérer les entrées alphabétiques dans une liste d’index.