Localizar e substituir - adicionar retorno de carro OU nova linha

183

No caso da seguinte sequência a ser analisada.

ford mustang,10,blue~~?bugatti veyron,13,black

Eu quero substituir o ~~?por umcarriage return

Substituindo por \n apenas adiciona a sequência"\n"

Como isso pode ser feito?

Mantisimo
fonte

Respostas:

272

Verifique se "Usar: expressões regulares" está selecionado na caixa de diálogo Localizar e substituir:

Caixa de diálogo Localizar / Substituir Use expressões regulares

Observe que, para o Visual Studio 2010, isso não funciona na extensão "Localização rápida" do Visual Studio Productivity Power Tools (a partir da atualização de julho de 2011); em vez disso, você precisará usar a caixa de diálogo Localizar e substituir completa (use Ctrl + Shift + H ou Editar -> Localizar e substituir -> Substituir em arquivos) e altere o escopo para "Documento atual".

Martin
fonte
5
usar o botão "Reproduzir" à direita do texto Localizar também é útil
Cel
3
e se você está tentando combinar caracteres especiais tais como parênteses não se esqueça de usar por exemplo, \)quando as expressões regulares estão em ...
Cel
2
O ?caractere precisa ser escapado no Regex porque significa que o elemento anterior é opcional. Portanto, o texto "Localizar o que" é correto ~~\?, com o ponto de interrogação escapado por uma barra invertida. A resposta que você deu funciona no texto de amostra porque ele encontrará avidamente o segundo til e o consumirá; no entanto, se um único til também existir no texto em qualquer lugar, ele também será substituído incorretamente por uma nova linha.
ErikE
Se o Productivity Power Tools estiver instalado, você ainda poderá pressionar ctrl + shit + he, em seguida, ctrl + h para abrir a janela Localizar / Substituir nativa do Visual Studio.
Neb
Deve-se notar que, se "Usar expressões regulares" estiver selecionado, é possível usar "\ n" para encontrar (e substituir) novas linhas também.
Jacob Lockard 5/06
28

Você também pode tentar \x0d\x0ana caixa "Substituir por" com a caixa "Usar expressão regular" marcada para obter retorno de carro + avanço de linha usando o Visual Studio Find / Replace. Usar \n(avanço de linha) é o mesmo que\x0a

reitor
fonte
13

Se você definir o sinalizador "Usar expressões regulares", \ n será traduzido. Mas lembre-se de que você precisaria modificar o termo de pesquisa para ser favorável à regexp. No seu caso, ele deve ser escapado assim "\ ~ \ ~ \?" (sem aspas).

detunizado
fonte
3
'~' não precisa ser escapado no Regex. É um personagem literal. Isto está incorreto.
ErikE
12

Se você deseja evitar o incômodo de escapar dos caracteres especiais em sua cadeia de pesquisa e substituição ao usar expressões regulares, execute as seguintes etapas:

  1. Procure sua string original e substitua-a por "UniqueString42", com expressões regulares desativadas .
  2. Procure por "UniqueString42" e substitua-o por "UniqueString42 \ nUniqueString1337", com expressões regulares em
  3. Procure por "UniqueString42" e substitua-o pela primeira linha da sua substituição (geralmente a sua string original), com as expressões regulares desativadas .
  4. Procure por "UniqueString42" e substitua-o pela segunda linha da sua substituição, com as expressões regulares desativadas .

Observe que, mesmo que você deseje especificar correspondências manualmente para a primeira pesquisa e substituição, você pode usar com segurança "substituir tudo" nas três últimas etapas.

Exemplo

Por exemplo, se você deseja substituir isso:

public IFoo SomeField { get { return this.SomeField; } }

com isso:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Você faria as seguintes substituições:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(regex desativado ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex em ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(regex desativado ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(regex desativado ).
Suzanne Dupéron
fonte
@Alex Se você tiver uma solução prática para esse problema, que evite ter que escapar manualmente da sua pesquisa e substituir o texto ao transformá-lo em expressões regulares, e passar os próximos 10 minutos consertando o monstro criado dessa maneira, ficarei muito feliz em ouvir porque minha resposta é apenas um truque feio. Mas, como você pode ver, todas as outras respostas que funcionam em um Visual Studio de baunilha sem plug-ins extras exigem o uso de expressões regulares e, assim, escapam ao texto simples.
Suzanne Dupéron 29/11
2
Eu não quis dizer isso de uma maneira ruim. Minhas desculpas eu esqueci de colocar um sorriso: D Quanto a uma solução, não, eu não tenho um que envolve VS. Mas descobri que qualquer editor externo decente que suporte regex (bloco de notas ++ etc) funciona muito bem.
28413 Alex
2
O UltraEdit é o rei da substituição de pesquisas - aqui você procura por novas linhas, quebras de linha ou qualquer outra coisa simplesmente marcando essas linhas e iniciando a pesquisa. - Quanto te substituir Simpy digite ^ n para \ n, ^ r para \ r e ^ t para \ t - mesmo que apenas VS2010 faria o mesmo :-)
Miros
Você sempre pode visitar o site regex101.com para verificar se sua sequência de pesquisa corresponderá a caracteres literais ou se será interpretada como caracteres de controle Regex.
ErikE
7

Você pode usar a pesquisa multilinha e substituir na macro do Visual Studio, que fornece uma interface gráfica agradável para a tarefa.

insira a descrição da imagem aqui

Peter Macej
fonte
Parece não funcionar com o Visual Studio 2017 sem algumas etapas extras, ou seja, é necessário clicar no botão "localizar nos arquivos" e modificar o escopo desse diálogo, o atalho padrão é f # interativo agora.
precisa