2017-04-24 1 views
1

J'ai une variable chaîne contenant les informations suivantesGarniture ou remplacer la variable chaîne PowerShell

@ {} [email protected], @ {[email protected] }

J'utilise cette variable pour une applet de commande qui accepte uniquement les données dans le format de

[email protected] icrosoft.com, [email protected]

J'ai essayé TrimStart("@{EmailAddress=") mais cela ne supprime que @{EmailAddress= pour le premier utilisateur et je suppose que TrimEnd ne serait pas utiliser autant que je suppose que cela est dû au fait il lit la chaîne comme une ligne et non comme user1, user2 etc.

Est-ce que n'importe qui pourrait donner des conseils sur la façon de supprimer ces caractères indésirables.

Répondre

2

Une autre solution serait de utilisez la fonction -replace. Ceci est juste un one-liner:

'@{[email protected]},@{[email protected]}' -replace '@{EmailAddress=([^}]+)}.*?', '$1' 

Regex utilisé pour remplacer:

enter image description here

+0

Merci Martin, le diagramme m'a aidé à comprendre - très apprécié –

+0

Salut Martin, Désolé de déplacer les poteaux de but un peu ici mais y at-il une option pour ajouter des guillemets doubles à chacun des utilisateurs par exemple "[email protected]", "[email protected]" - J'apprécie que ce soit une question entièrement différente nécessitant une réponse différente, mais j'ai pensé que je demanderais ici d'abord. Merci –

+1

Bien sûr, remplacez simplement '' $ 1'' par '' "$ 1" '' –

2

Une solution possible est d'utiliser Regex pour extraire les chaînes que vous voulez, et les combiner en un résultat:

$str = "@{[email protected]},@{[email protected]}" 
$pattern = [regex]'@{EmailAddress=(.+?)}' 
$result = ($pattern.Matches($str) | % {$_.groups[1].value}) -join ',' 

$ result est alors:

[email protected],[email protected] 
+0

Merci Micky, c'est une bonne solution. –