Outils pour utilisateurs

Outils du site


Panneau latéral

liens utiles

cenabumix

Site Cenabumix principal : http://www.cenabumix.org/wordpress/

Groupe Cenabumix framavox: https://framavox.org/g/6jsFiPzq/cenabumix

Dokuwiki

Accueil sommaire

Aide a la syntaxe :

writer_et_expressions_regulieres_regex

les modifications de masse dans LibreOffice et, plus particulièrement, dans Writer d’après Dominique Prieur, un de nos membres.

Vous avez tendance à mettre de façon aléatoire deux espaces entre les mots. Comment régler ce problème si votre texte fait 200 pages ? On peut certes corriger à la main chaque double espace, mais ça va devenir rapidement fastidieux. En surligné jaune se trouve le texte fautif.

Deux méthodes :

  1. La première, « Édition », « Rechercher et remplacer » (ou Ctrl h), vous tapez deux espaces dans le cartouche « Rechercher » et une espace dans le cartouche « Remplacer ». Vous vous assurez que la case « Expressions régulière » est décochée, puis vous cliquez sur « remplacer tout ». Les doubles espaces ont disparu. Elles sont remplacées (en typographie, espace est un mot féminin) par des espaces simples.
  2. La deuxième, on met en surbrillance tout ou partie du texte qu’on veut corriger. « Édition », « Rechercher et remplacer » (ou Ctrl h). Vous vous assurez que la case « Expressions régulières » est cochée. Dans le cartouche « Rechercher », vous tapez _{2} (Attention, le souligné bas _ représente ici une espace) et vous tapez une espace simple dans le cartouche « Remplacer ». Puis vous cliquez sur « remplacer tout ». Les doubles espaces ont disparu. Elles sont remplacées par des espaces simples.

Explication : dans le cartouche « Rechercher », l’espace est matérialisé par un appui simple sur la barre espace. {2} veut dire que vous cherchez 2 espaces successifs. Mais si vous alignez les espaces de façons totalement aléatoire (2, 3, 4 voire plus), alors vous passerez {2,}. Ça veut dire que vous chercherez 2 espaces successifs voire plus. Les expressions régulières sont très puissantes dès lors qu’on les maîtrise un peu.

Supposons qu’on vous propose un texte avec des sauts de paragraphes composés de paragraphes vides matérialisés par le signe « ¶ » dit « pied de mouche ».

Ci-dessous, j’ai un paragraphe vide censé aérer mon texte.

Ce n’est pas ainsi qu’on doit faire.

Il faut utiliser le style dédié « Corps de texte » pour arriver à un résultat propre.

Pour supprimer ces sauts de ligne abusif, je peux les effacer un par un. Avec les expressions régulières, ce sera beaucoup plus simple :

  • On met en surbrillance tout ou partie du texte qu’on veut corriger. « Édition », « Rechercher et remplacer » (ou Ctrl h). Vous vous assurez que la case « Expressions régulières » est cochée. Dans le cartouche « Rechercher », vous tapez ^$ (l’accent circonflexe suivi immédiatement du signe $). Vous ne mettez rien dans le cartouche « Remplacer » et vous cliquez sur « Remplacer tout ». Les sauts de lignes ont disparu.
  • Explication : l’accent circonflexe, dans les expressions régulières, indique un début de paragraphe, alors que le signe $ indique la fin. Là, vous cherchez un paragraphe avec un début (^ ), une fin ($) et rien entre les deux. Bref, vous supprimez les paragraphes vides.

Corriger une très longue liste de numéros de téléphone présentés n’importe comment.

Afin d’éviter la lourdeur des redites, il faut systématiquement mettre en surbrillance la colonne sur laquelle nous voulons travailler, faute de quoi les remplacements peuvent échouer. Soit une liste de n° de téléphones mal fichus : 634504567 06 74 54 00 60 674674507 0663406907 06.74.67.67.67 06-55-65-74-73 675565367 06/77/76/47/67 656457677 06.77.74.63.70 06-73-04-47-75

Comment, sans les reprendre un par un, les formater selon les règles typographiques : 01 23 45 67 89, c’est-à dire avec les chiffres par paquets de 2 séparés par une espace (mot féminin en typographie) ? Nous allons nous pencher sur une fonction d’une puissance difficilement soupçonnée. J’évoque les regular expression, ou expressions régulières abrégées en REGEX. Il faut trouver un « motif » qui décrit une chaîne de caractères sans les passer un par un en revue. Par exemple, si je cherche des chiffres, je ne veux pas que LIBO me trouve des lettres alphabétiques ou des caractères de ponctuation. Mais je n’ai pas envie non plus de passer en revue un par un les 10 chiffres. Dans un premier temps, et pour en revenir à notre liste de numéros, nous allons nous débarrasser des caractères parasites qui se trouvent au milieu des chiffres, y compris les espaces. Commmencez par mettre la colonne en surbrillance. Voici la copie écran de Édition, Rechercher & remplacer, plus facilement accessible avec Ctrl (contrôle) h :

Dans la case Rechercher, j’ai listé tous les caractères parasites que j’ai « protégés » avec l’antislash (\). En effet, certains caractères ont une signification particulière dans LibreOffice. Il faut les « protéger » pour qu’ils retrouvent leur sens normal. Je les ai séparés avec | (obtenu avec Alt Gr et 6 du clavier alphanumérique) qu’on appelle un pipe qui veut dire « ou ». Là, je cherche une barre de fraction / (qui n’a pas besoin d’être protégée, mais vous le feriez que ça n’aurait pas d’importance) ou un tiret (protégé avec \) ou un point (protégé avec \) ou une espace (protégée avec \). Cette suite me donne ceci /|\-|\.|\_ (le tiret bas ici matérialise l’espace. Dans les faits, vous placerez bien une espace) qui peut se lire barre de fraction OU tiret OU point OU espace. Il faut cocher la case Expressions régulières. Vous ne mettez rien dans la case « Remplacer » et vous cliquez sur tout remplacer. Une petite fenêtre apparaît et vous montre ce que LIBO a remplacé : Vous cliquez sur Fermer. Les caractères parasites ont disparu.

Vous vous êtes trompé dans le motif de Rechercher et le résultat obtenu n’est pas ce que vous attendiez ? Pas de panique, vous fermez les deux fenêtres ci-dessus, puis Édition, Annuler (ou plus simplement Ctrl z) et tout redevient comme avant.

En balayant les numéros de téléphone, nous voyons qu’il en subsiste sans zéro au début, d’autres avec un zéro. Pour simplifier, nous allons supprimer tous les zéros toujours avec les REGEX. Dans Rechercher (Ctrl h), nous allons passer le motif suivant : ^0 L’accent circonflexe indique à LIBO qu’il doit chercher uniquement le premier caractère de chaque cellule et uniquement si c’est un zéro. Il ignorera de facto les zéros qui ne sont pas en première position. Nous ne mettrons rien dans Remplacer.

Logiquement, vous ne devriez plus avoir que des numéros à 9 chiffres débutant par 1 à 9. Nous allons maintenant, en une seule passe, ajouter un zéro au début et grouper les chiffres par groupes de deux séparés par une espace pour obtenir des numéros de cette forme : 01 23 45 67 89. Les REGEX vont venir à notre secours :

Le motif dans Rechercher est un peu plus élaboré.

Prenons la toute première partie : ([0-9]). Nous demandons ici à LIBO de rechercher le premier caractère (premier parce que c’est la première partie du motif que LIBO lit de gauche à droite) quel qu’il soit, dès lors que c’est un chiffre de 0 à 9 inclusivement (je peux avoir une liste de numéro avec des 9 ou 8 en premier caractère…). Cette recherche se fait avec [0-9] qui représente un unique carcatère. Les parenthèses disent à LIBO de s’en souvenir. Les autres groupes sont légèrement différents dans le sens où nous demandons à LIBO de mémoriser (les parenthèses) les deux chiffres suivants {2}, quels qu’ils soient [0-9]. Au final, nous avons ce motif : ([0-9]{2}) répété 4 fois.

Dans Remplacer, nous plaçons 0$1_$2_$3_$4_$5 (le tiret bas illustre l’espace. Vous mettrez, bien sûr, une espace à la place).

Là, nous demandons à LIBO de mettre un zéro au début, puis d’ajouter la première partie du motif où il n’y avait qu’un chiffre ([0-9]) qui s’identifie avec $1, puis mettre une espace et placer la 2e partie du motif ([0-9]{2}) qui s’identifie avec $2, puis répéter encore 3 fois cette opération avec $3, $4 et $5. Après avoir tout remplacé, nous ne devrions plus avoir que des numéros aux normes.

Bien sûr, ceci n’a rien d’impressionnant avec 10 numéros. Mais le résultat serait le même avec 500 numéros. J’ajoute, pour être complet, que cette méthode n’est applicable qu’avec les numéros de téléphone aux normes françaises. Elle échouera avec les numéros étrangers (± 10 chiffres, paquets de 3 chiffres, etc.)

Les REGEX sont, comme je le disais, d’une puissance impressionnante. Si le sujet vous intéresse, je vous suggère d’aller dans l’aide de LIBO (qu’on obtient avec la touche F1) et de rechercher l’article sur les expressions régulières. De plus, la toile regorge de tutos depuis les plus basiques comme cette démonstration jusqu’aux plus élaborés.

writer_et_expressions_regulieres_regex.txt · Dernière modification: 2024/03/26 15:05 de frans