Question Controler les espaces de fin de chaine de caracteres

Plus d'informations
il y a 3 mois 2 semaines #34979 par J-L Prout
Bonjour à tous,

     J'ai une chaîne de caractères, très ordinaire que j'appelle $Expresion, par exemple:
                 "     Portez ce whisky au vieux juge blond qui fume     "    (*)
     Je voudrais supprimer les espaces éventuels de début et les espaces éventuels de fin pour récupérer seulement:
                  "Portez ce whisky au vieux juge blond qui fume"
     Bien sûr, je ne connais ni le nombre d'espaces de début ni le nombre d'espaces de fin.
     Avec l'opérateur "-match", j'arrive bien à isoler les espaces de début, mais pour les espaces de fin, j'ai essayé
toutes sortes de combinaisons sans jamais arriver à isoler en totalité les espaces de fin dans un $Matches[n], n ayant
valeur de fin des $Matches.
     Pour ma part j'ai beaucoup tourné autour de:
                                           "$Expression -match '^(  *)(..*)(  *)$'"
mais il n'y a rein à faire;
     Quelqu'un a-t-il une solution qui conviendrait?

(*) Curiosité: cette phrase, que j'utilise souvent comme modèle de chaîne de caractères, a la propriété de contenir
au moins une fois chaque lettre de l'alphabet latin.
 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 mois 2 semaines #34980 par J-L Prout
Mon message a la même portée que les quatre messages précédents. Ces messages ont été perturbés par un "i" entre crochets qui disparaissait et mettait la fin du texte en italique (d'où le "i").
J'aurais souhaité effaces ces autres messages, de sujet "Extraction des espaces de fin d'une chaîne de caractères", "Ecarter les espaces de fin de chaîne de caractères ("trailing spaces")" mais je ne suis pas le médiateur.
Merci d'oublier ces messages et de ne vous intéresser qu'à " Controler les espaces de fin de chaine de caracteres".

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 4 semaines #35069 par J-L Prout
J'ai trouvé une réponse qui me satisfait.
En réalité, il faut traiter l'expression avec 2 " -match " successifs, comme ceci:

[string] $Expression = '      Portez ce whisky au vieux juge blond qui fume        '
If ( $Expression -match '^( *)(..*)$' ) { [string] $Expression_1 = $Matches[2]; }
Else { [string] $Expression_1 = $Expression };
If ( $Expression_1 -match '( *)$') { [string] $Expression_2 = ($Expression_1 -replace $Matches\[1\] , ''); }
Else { [string] $Expression_2 = $Expression_1 };
Write-Host 'MàP AVANT - Expression: "' , $Expression , '"' -separator '';
Write-Host 'MàP ENTRE - Expression: "' , $Expression_1 '"' -separator '';
Write-Host 'MàP APRÈS - Expression: "' , $Expression_2 , '"' -separator '';

On isole les espaces de début par le premier " -match ". avec '^( *)(..*)$'. On les écarte en ne gardant que $Masques[2].
Une fois les espaces éventuels de début supprimés, on lance un 2ème " -match" avec '( *)$'. On utilise un " -replace "..pour les remplacer par une chaîne vide.
Si, par hasard, il n'y a pas d'espaces de fin, " -replace " ne hurle pas!!
Il ne faut donc pas traiter par un seul " -match " avec la concaténation de '^( *)(..*)$' et de '( *)$' comme j'ai cherché à le faire avec '^( *)(..*)( *)$'..
Je trouve, tout de même un peu curieux de traiter différemment les espaces de début et les espaces de fin.
Comment fait-on avec les caractères arabes?
Qu'en pensent les spécialistes?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 3 semaines #35082 par Christophe MELIN
Salut,

Pourquoi ne pas essayer simplement $expression.trim() ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 3 semaines #35094 par J-L Prout
Bonjour Christophe,

Bravo!!. Tu es de bon conseil.
Je ne connaissais pas cette méthode. Je viens de l'expérimenter. C'est exactement ce que je recherchais. Voilà donc une solution excellente et qui tient en une seule ligne.
J'aurai ainsi appris quelque chose qui va bien souvent me servir.
Merci beaucoup, Christophe.
On peut désormais clore le dossier.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.105 secondes
Propulsé par Kunena