/ / Escape Tilde en Powershell Replace - regex, powershell

Escape Tilde en Powershell Replace - regex, powershell

Estoy trabajando en un script de powershell para analizar un archivo en un formato delimitado diferente que se puede cargar fácilmente en Excel o en una base de datos.

Lo he calculado en su mayoría, excepto para encontrar y reemplazar la cadena "~ S ~ |", donde todos los caracteres deben tomarse como literales.

He intentado lo siguiente en vano: "~ S ~ |" "~ S ~ |" "~ S ~ |" <- este es squirrely desde | es o en tierra RegEx

Cualquier sugerencia sería útil.

Respuestas

5 para la respuesta № 1

El método regex.escape está diseñado para este tipo de situaciones en las que no se sabe qué caracteres se consideran especiales (metacaracteres).

PS> [regex]::escape("~S~|")
~S~|

Puede ver que el único metacaracteres es el signo de canalización (por ejemplo, "|") y que el método de escape se le escapó (agregó una barra invertida delante de él).

PS> "this~S~|is~S~|a~S~|dog" -replace [regex]::escape("~S~|")
thisisadog

1 para la respuesta № 2

puedes probar esto

$string = "this~S~|is~S~|a~S~|dog"
$string -replace "~S~|"," "

1 para la respuesta № 3

Tuve la oportunidad de solucionar esto con un trabajo alrededor. Gracias por todos sus comentarios, todas las respuestas funcionan como usted lo describió.

Para lograr que esto funcione en una cadena muy larga con múltiples instancias del valor "encontrar", terminé teniendo que construir la cadena a medida que crecía.

Por ejemplo:

$tString = $_
$tString = $tString -replace "Name:", ""
$tString = $tString -replace "Id:", ""
$tString = $tString -replace "Administrative group:", ""
$tString = $tString -replace "Administrative class(es):", ""
$tString = $tString -replace "Primary group:", ""
$tString = $tString -replace "Session group:", ""
$tString = $tString -replace "~S~([^-]+)|", "$1|"
$tString = $tString -replace ";|", ";"
return $tString