LibreOffice 4.1.3.2. Tout OS. Extraire une chaîne de caractères.

Bonsoir,

J'ai un tableau d'environ 600 lignes. Dans une cellule de chaque champs,
j'ai une longue description d'un véhicule dont son immatriculation qui est
perdue dans une centaine de caractères.

Ex : véhicule électrique (332 BFM 92) sortie etc.

Je souhaiterais placer dans une cellule à côté uniquement l'immatriculation.

Avec ctrl+h, je peux rechercher [1-9]{1}\ [a-z]{1}\ {0-9]{1} et je trouve
les immatriculations correspondant à ce motif. Je ne sais par contre pas
placer le résultat dans une cellule adjacente.

Mes tentatives avec TROUVE ou cherche et mon motif n'aboutissent pas.

Toutes les immatriculations n'ont pas d'espace. Elles ne sont pas toutes non
plus délimitées par des parenthèses mais je saurai m'arranger de ces
nuances.

Avez-vous une piste à me proposer ? Je vous remercie.

Bonne nuit,

Dominique

Mon motif est faux. Il est plutôt de la forme : [1-9]{1,}\ [a-z]{1,}\
{0-9]{1,}

Là, c'est mieux...

Mais ça ne marche pas pour autant :slight_smile:

Bon, je vais me coucher.

Bonne nuit à tous,

Dominique

Bonjour Dominique,

Une expression régulière qui va fonctionner :
[0-9]{1, 4} ?[A-Z]{2, 3} ?[0-9]{2}
C'est à dire les séquences :
  un (minimum) à quatre (maximum) chiffres
  pas d'espace ou un espace (le ? signifiant 0 ou 1 fois le caractère qui
précède)
  deux ou trois majuscules (en cochant "Respecter la casse" dans la barre de
recherche)
  pas d'espace ou un espace
  deux chiffres (et seulement deux chiffres)
Il faut aussi cocher Expressions régulières dans Autres Options de la
Recherche.

Dans l'exemple que tu as donné, j'ai vu "sortie". Y a-t-il aussi des dates
dans ce qui suit ?

C'est la formule STXT qui fait la recopie. Il faut lui donner la cellule
contenant le texte à recopier, la position de la chaîne et sa longueur.
Pour arriver à ça, il faut mettre à la place de la position une formule
CHERCHE qui contiendra l'expression régulière vu plus haut.
Si le tableau occupe la première colonne:
CHERCHE("[0-9]{1, 4} ?[A-Z]{2, 3} ?[0-9]{2}";A1;1)
Pour la longueur, vois-tu ce qui va falloir faire ?

Cordialement,

Jacques

Pour la longueur, on va faire une soustraction, la position de la fin de la
chaîne moins la position de début.
La fin de la chaîne :
La seule partie de la chaîne qui ne varie pas en longueur, c'est le code du
département. Avec une écriture un peu différente, on obtient:
CHERCHE("(?<=[0-9]{1,4} ?[A-Z]{2,3} ?)[0-9]{2}";A1;1)+2)
Ce qui veut dire:
Chercher la position d'un code de deux chiffres : [0-9]{2}
à la condition qu'il soit précédé de : [0-9] {1,4} ?[A-Z]{2,3} ?
A quoi il faut ajouter 2 pour avoir la fin de la chaîne.

Le début de la chaîne ne pose pas de problème particulier :
CHERCHE("[0-9]{1,4}.{2,5}[0-9]{2}";A1;1)

La longueur sera calculée par :
CHERCHE("(?<=[0-9]{1,4} ?[A-Z]{2,3} ?)[0-9]{2}";A1;1)+2) -
CHERCHE("[0-9]{1,4} ?[A-Z]{2,3} ?[0-9]{2}";A1;1)

On a donc la formule suivante pour la recopie :
STXT(A1;CHERCHE("[0-9]{1,4} ?[A-Z]{2,3}
?[0-9]{2}";A1;1);CHERCHE("(?<=[0-9]{1,4} ?[A-Z]{2,3}
?)[0-9]{2}";A1;1)+2-CHERCHE("[0-9]{1,4} ?[A-Z]{2,3} ?[0-9]{2}";A1;1))

Là, je reconnais que c'est un peu difficile à lire. Mais il y a beaucoup de
contraintes.
S'il y avait eu des parenthèses partout autour des numéros
d'immatriculation, ça devient beaucoup plus facile. En citant Pierre-Yves :

=STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1)
Un bon formatage...

Cordialement,

Jacques

Bonjour

Jacques wrote

Un bon formatage...

Oui... mais je voudrais saluer le premier exemple de "recherche-arrière"
(Look-behind) que je vois passer pour LibreOffice.

Jacques wrote

CHERCHE("(?<=[0-9]{1,4} ?[A-Z]{2,3} ?)[0-9]{2}";A1;1)+2)
Ce qui veut dire:
Chercher la position d'un code de deux chiffres : [0-9]{2}
à la condition qu'il soit précédé de : [0-9] {1,4} ?[A-Z]{2,3} ?

J'en profite pour rappeler que depuis la version 4.0 nous utilisons
maintenant
le moteur d'expression régulière ICU :
https://wiki.documentfoundation.org/ReleaseNotes/4.0/fr#Options_.2F_G.C3.A9n.C3.A9ral

Cordialement
Pierre-Yves