0
votes

PowerShell - Comment puis-je supprimer les barres obliques inverses répétées dans la chaîne

$string = "my\\\name\\is\John\\\\Doe"
Desired output:
my\name\is\John\DoeThank you for your help in advance!

0 commentaires

3 Réponses :


2
votes

Parlons de ce que nous devons faire.

Prenez la chaîne et créez un tableau en utilisant -split '\\' . Pourquoi \\ parce que -split autorise l' expression régulière et \ est une chaîne d'échappement pour l'expression régulière.

Ensuite, nous devons supprimer tous les objets de tableau vides en utilisant Where-Object assurant que la longueur de la chaîne est supérieure à 0.

Enfin, nous utilisons cela avec la méthode de chaîne join(Joining Char, Array)

La méthode join() vous permet de joindre un tableau en créant une chaîne en utilisant un char comme colle.

my\name\is\John\Doe

retour

$string = "my\\\name\\is\John\\\\Doe"
[string]::join('\',($string -split "\\" | Where-Object{$_.length -gt 0}))


0 commentaires

1
votes

Même principe, méthodes différentes

$string
my\name\is\John\Doe

Production

$string = "my\\\name\\is\John\\\\Doe"
while($string -match '\\\\'){$string = [regex]::Replace($string,'\\\\','\')}

Une autre façon d'utiliser regex

my\name\is\John\Doe

Production

$string = "my\\\name\\is\John\\\\Doe"
$string.Split('\').where{$_} -join '\'


0 commentaires

1
votes

Utiliser -replace semble simplement plus simple.

# replace all single or consecutive \ with a single \
$string -replace '\\+','\'

# replace each \ that had a preceding \
$string -replace '(?<=\\)\\'


1 commentaires

Je pense que c'est la meilleure réponse. J'aimerais pouvoir offrir ma réponse à cela. Bonnes compétences en regex @AdminOfThings