Question \"ForEach -replace\" tout caractère après @

Plus d'informations
il y a 7 ans 4 mois #27705 par Ruff
Hello,

Comme dit dans le titre, je cherche à remplacer tous les caractères précédés d'un @ dans chaque ligne de la colonne \"user\".

Voici le code que j'utilise mais j'ai l'impession que ça n'est pas ça :)

(un soucis avec \"@*\")

$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"

$PCs | Foreach {$_.user=$_.user -replace \"@*\",'DOMAINE.LOCAL';$_}


Cela me donne un truc du style :
User : DOMAINE.LOCALtDOMAINE.LOCALoDOMAINE.LOCALtDOMAINE.LOCALoDOMAINE..

J'ai l'impression qu'il me met chaque lettre du prénom de l'utilisateur suivi de DOMAINE.LOCAL...

Merci d'avance !!

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

Plus d'informations
il y a 7 ans 4 mois #27706 par Laurent Dardenne
Salut,
ta regex est fausse, car elle matche toutes les lettres avec le quantifier * :

Correspond zéro, une ou plusieurs fois à l'élément précédent.

Ce qui fait que tu remplaces chaque lettre :
[code:1]
$r=[regex]\"a*\"
$r.Matches('avant@après').captures.index
[/code:1]
Il faut créer un groupe avec un caractère servant 'd'ancrage' :
[code:1]
#groupe après @
'avant@après' -replace \"@(.*)\",'-Replace-'

#groupe avant @
'avant@après' -replace \"(.*)@\",'-Replace-'
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 7 ans 4 mois #27707 par Ruff
Nickel!

Merci pour l'info. J'ai du mal à comprendre ton explication, \"groupe... ancrage...\" :) (surement trop novice pour comprendre)

Mais après avoir testé ceci, cela fonctionne...

[code:1]

$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"
$PCs | Foreach {$_.user=$_.user -replace \"@(.*)\",'@DOMAINE.LOCAL';$_}

[/code:1]

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

Plus d'informations
il y a 7 ans 4 mois #27709 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:
xnyp351 écrit:

surement trop novice pour comprendre

Voici de quoi l'être un tout petit peu moins ;)
xnyp351 écrit:

J'ai du mal à comprendre ton explication

Les regex ne sont déjà pas aisée à expliquer simplement, alors expliquer pourquoi elle ne fonctionnent pas, c'est le niveau au dessus :P
Il faut juste te souvenir qu'une regex en interne, grosso modo, parcourt chaque caractère (on parle de consommation)
Ex:
le caractère n° 1 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.

le caractère n°2 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.

etc.

pour la caractère @ la réponse est 'oui il est égal',alors on le remplace.Suivant.

Tutoriels PowerShell

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

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