Quelques requêtes Grep sur les chiffres

Vous trouverez ici quelques requêtes Grep que j’utilise fréquemment dans InDesign. Si ce n’est pas encore fait, je vous conseille la lecture de cet article : Grep et InDesign. Et je ne saurai que trop vous conseiller l’excellent ouvrage de Laurent Tournier : GREP et InDesign. Rechercher, remplacer et formater en un clic.

Table des matières

Rappel avant de commencer : quelques métacaractères Grep

  • \d permet de rechercher un chiffre.
  • . (un point) recherche n’importe quel caractère.
  • Les accolades {} permettent de dire le nombre de fois que l’on recherche un motif.
    Par exemple, .{3} recherche exactement 3 caractères. Lorsqu’il y a deux chiffres dans l’accolade séparés par une virgule {x,y}, cela signifie qu’on recherche le motif au moins x fois et au plus y fois.
    Dans l’expression .{2,7}, on recherche au moins 2 caractères et au plus 7 caractères.
  • La barre verticale | correspond à “ou”. Par exemple : (Madame|Monsieur) Durant va rechercher Madame Durant ou Monsieur Durant.
  • Les crochets [] représente un jeu de caractères. Par exemple, [a-z] trouve un seul signe contenu dans la chaîne de « a » à « z », tandis que [\d.,] recherche un digit ou un point ou une virgule

Changer le séparateur de milliers

Nous sommes souvent amenés à se plier aux exigences du client. Notamment, celui qui nous dit: il faut mettre un point comme séparateur de milliers. Alors que… ce n’est plus d’actualité depuis 1948. Voir l’article Séparateur de millier sur mon blog.

Bref…

Il s’agit de rechercher l’espace fine qui se trouve entre des chiffres (des digits) et la remplacer par un point.

  • Rechercher: (\d)~<(\d{3})
  • Remplacer: $1.$2

Explications

Je cherche un digit, suivi d’une espace fine, suivie de 3 digits.
Je remplace l’espace fine par un point.


Placer le signe € derrière un montant

Vous avez un texte dans lequel les montants sont écrits comme ceci: € 43 987 376, et vous aimeriez déplacer le signe € derrière ce montant.

On recherche donc : €, suivi ou non d’une espace, suivi d’un ou plusieurs digit, suivi éventuellement d’une espace fine ou d’une espace insécable, suivi d’un ou plusieurs digit, suivi éventuellement d’une virgule et d’un ou plusieurs digits (ouf !).

La requête Grep est :

  • Rechercher: (€)\h?([\d,\h]+\d)
  • Remplacer: $2~S$1

Explications

Je recherche

  • un groupe composé du seul sigle €;
  • suivi de \h? qui représente une espace verticale (c’est un métacaractère apparu dans InDesign CC 2014);
  • suivi d’un second groupe composé de:
    • [\d,\h], jeu de caractères qui recherche soit un digit, soit une virgule soit une espace verticale
    • ce jeu de caractère est répété une ou plusieurs fois grâce au +
    • suivi un digit \d

Le “remplacer” correspond à une interversion des 2 groupes et avec insertion d’une espace insécable ~S.

À l’inverse, pour placer le sigle € devant le montant :

  • Rechercher: (\d[\d,\h]+\d)\h?(€)
  • Remplacer: $2~S$1

Ajouter le signe “+” devant les nombres de chaque cellule

J’aimerais ajouter le signe + devant tous les nombres positifs qui se trouvent dans un tableau…

  • Rechercher: ^([\d,\h])+
  • Remplacer: +$0

Explications

  • je recherche uniquement au début de paragraphe grâce au ^ (le début d’une cellule est considéré comme un début de paragraphe);
  • suivi d’un groupe composé des mêmes éléments que dans l’astuce précédente;
  • Et je remplace par “+” suivi du contenu du groupe.

Il y a une astuce dans ma recherche… Qui me dit que cette requête ne va pas ajouter un signe “+” devant les nombres négatifs ? Ou devant un nombre entouré de parenthèse (comme on en trouve souvent dans les documents comptables). Simplement parce que je commence ma recherche par le ^ qui correspond à “début de paragraphe”, c.-à-d. que ma requête ne va pas impacter les éléments qui ne commencent par un digit. Et si ça commence par un digit, c’est forcément que le nombre est positif.

Attention toutefois…

  1. Lorsque je fais ce genre de modification, je fais au minimum une vingtaine d’essais avant de me lancer dans un “Tout remplacer”.
  2. Cette requête va aussi changer les années… Si vous travaillez sur un rapport annuel, les années sont quasi omniprésentes dans les tableaux.

Supprimer les parenthèses autour d’un montant et ajouter le signe “-” devant

Je viens de vous parler de documents comptables dont les montants négatifs sont mis entre parenthèses (voir le screenshot ci-après).

Je vous renvoie à la requête précédente avec une ajoute : les parenthèses.

Mais les parenthèses sont des métacaractères (voir dans l’intro de cet article). Si vous désirez rechercher une parenthèse, il faut donc l’échapper avec l’antislash \ : \(rechercher-quelque-chose-entre-parenthèses\)

Du coup, ma recherche ressemble à ceci:

  • Rechercher: \(([\d,\h]+\d)\)
  • Remplacer: -$1

Si vous avez lu tout cet article, vous n’avez pas besoin d’explication pour cette dernière requête Grep.


2 Réponses à “Quelques requêtes Grep sur les chiffres”

  1. Bonjour,
    Auriez-vous une technique pour automatiser l’ajout d’une espace fine comme séparateur de milliers à plusieurs nombres ?

    1. Bonjour Julie,
      C’est un problème complexe. Et non, je n’ai trouvé aucun moyen de l’automatiser. Pour une simple raison: que se passe-t-il lorsqu’il y a des années dans le texte?
      Je conseille donc de travailler un cas après l’autre:
      Rechercher: (\d)\h(\d{3})
      Remplacer: $1~<$2

Laisser un commentaire