Invertendo Parênteses

4

Eu tenho um texto com parênteses invertidos. Por exemplo, em vez de (text-in-parentheses) , tenho )text-in-parentheses(

Existe uma maneira fácil de inverter todos os parênteses no texto? Se sim, como?

Atualização: Este é um arquivo de texto simples, cada parêntese é invertido. Estou usando o Windows 7.

    
por Michael Bikovitsky 26.11.2013 / 22:13

2 respostas

6

Powershell

Versões curtas

(Get-Content "in.txt" -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")" >> "out.txt"

Também é possível:

Set-Content "out.txt" ((Get-Content "in.txt" -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")")
  • in.txt
  • Grava em out.txt (role horizontalmente no primeiro exemplo de código para ver o final da linha)

Versões longas

$in = "in.txt";
$out = "out.txt";

(Get-Content $in -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")" >> $out

Também é possível:

Set-Content $out ((Get-Content $in -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")")

Explicação

Por favor, ignore as barras invertidas enigmáticas por um momento - elas são boas apenas para separar parênteses que têm um significado especial em expressões regulares.

Primeiramente, substituímos cada ocorrência de ( por NUL) (consulte o caractere NUL ). Em seguida, substituímos cada ) por ( . Como etapa final, NUL( é re-substituído por ) .

Usando dessa forma, garantimos que não fazemos "substituição dupla", por exemplo:

Initial string value:
(test)

After replacing "(" by ")"
)test)

After replacing ")" by "("
(test(

Aviso

O arquivo não deve conter a seqüência NUL) . Isso levaria a interpretações erradas do meu script Powershell desde que eu usei o caractere NUL como um indicador especial (por exemplo, a mesma situação surge quando se usa telas verdes e vestindo roupas verdes).

    
por 26.11.2013 / 22:57
3

Tenho certeza de que existem maneiras de fazer isso em uma única etapa, mas uma maneira rápida é alternar todos os parâmetros de um paren para um caractere único, como ^, depois alternar todos os outros parentes para o paren adequado, depois alternar o char especial para o parente oposto.

Por exemplo, no bloco de notas:

  1. Substituir tudo (com ^
  2. Substituir tudo) por (
  3. Substituir tudo ^ por)
por 26.11.2013 / 22:58