Como você faz referência a um grupo de captura com a localização e substituição de expressões regulares no Visual Studio 2012, 2013, 2015 e código VS


255

Sei que há muitas perguntas sobre isso, mas nenhuma que eu encontrei referenciou especificamente a qual versão do VS elas se referiam. Com essas informações importantes ausentes, ainda não consegui usar as respostas que encontrei. O mais comum foi

  • Surround with {}, captura de exibição com \ 1, \ 2, \ n

No entanto, esse parece ser o método antigo de localizar e substituir regex no Visual Studio e não funciona no VS 2012.


1
Não é difícil encontrar na ajuda: na caixa de diálogo Pesquisar / Substituir, F1; No início de Localização e substituição de texto, há um link para Usando expressões regulares no VS ; ali, a segunda dica refere-se a Substituições em expressões regulares ; lá, fornece o básico e diz que há mais detalhes em Substituindo um grupo numerado e Substituindo um grupo nomeado .
PJTraill

2
@PJTraill, é bom saber que eles tornaram mais fácil responder a uma pergunta da versão de 2012 entre 2013 e 2015. Com os votos, acho que é bastante óbvio que ainda não é "muito difícil" encontrar a ajuda. IMO: Se é mais fácil pesquisar e votar em um artigo de pilha excedente do que usar a localização, substituição, captura sem procurar ajuda, é muito mais difícil do que deveria ser.
precisa saber é o seguinte

Uma coisa que me incomoda no MSVS 2012/3 são os dois diálogos diferentes Procurar / Substituir, em particular o menor (Ctrl-H), onde mantenho acidentalmente (com as teclas pressionadas provavelmente significando outra coisa em outro lugar) alterando o escopo da pesquisa . Mas o que quero enfatizar é que o diálogo maior (Ctrl-Shift-H) possui botões após os campos Localizar e Substituir, que fornecem uma lista das possibilidades mais importantes, incluindo o que você está procurando - para que você não preciso de ajuda! Eu acho que muitas pessoas não vêem os botões ou param no diálogo Ctrl-H e não conseguem vê-los.
PJTraill

Concordo que a ajuda é um pouco incômoda para encontrar; Eu suspeito que eles dão prioridade à pesquisa de texto sem formatação. Meu argumento é mais que, se alguém sabe ou assume que deve estar lá, pode encontrá-lo razoavelmente facilmente; muitas vezes sigo essa rota, pois prefiro usar a documentação canônica quando a encontrar. Eu não quis parecer depreciativo; Eu acho que é "muito difícil" e "não muito difícil" - eles não são opostos se você vê "não muito" como "difícil" qualificado e acrescenta a resposta ao implícito "difícil para quê?".
PJTraill

Eu "sabia" que a marcação REGEXP estava usando '()'. Re leu a documentação e não funcionou ... então vim aqui para ter certeza ... então fiz mais algumas experiências e funcionou. Portanto, na IMHO, a documentação do MSDN precisa ser super clara de que () são usados ​​para "marcar" uma expressão, para aqueles que tiveram que aprender a antiga nomenclatura "tag" do VS6. Seria bom se eles pudessem usar a mesma nomenclatura. Grupos numerados ... simplesmente não aciona as sinapses o suficiente IMHO.
Ross Youngblood

Respostas:


356

Para localizar e substituir no VS 2012 e VS 2015, faça o seguinte:

Exemplo (graças a syonip)

Nas opções de localização, verifique se 'usar expressões regulares' está marcada e coloque o seguinte como texto para localizar:

_platformActions.InstallApp\((.+)\)

E o seguinte como o texto para substituí-lo por:

this.Platform().App($1).Install()

Nota: Como o SLaks aponta em um comentário abaixo, a alteração na sintaxe do regex deve-se à mudança do VS2012 para o mecanismo de regex .Net padrão.

Nota: Outro comentarista apontou que isso também funciona no Código do Visual Studio (vscode)


10
Para ser mais geral, o VS2012 agora usa o mecanismo de regex .Net padrão.
SLaks

4
Você não precisa escapar do período entre char _platformActionse InstallApp?
rory.ap

Pensando nisso agora, faria sentido. Eu não testei. Sinta-se livre para lançar uma edição lá.
SgtPooki

1
Acabei usando o nome como o numérico parece não funcionar para mim, pelo menos. (?<rval>.+)em busca e em substituição${rval}
Mark Schultheiss

2
Alguma ajuda extra: se você deseja substituir o item (. *) Pelo item $ 18 (adicionando um '8' diretamente após a captura), precisará usar o item $ {1} 8
Luc Bloom

17

Para adicionar um exemplo disso, aqui está algo que eu tive que fazer no meu código:

Encontre o que:

_platformActions.InstallApp\((.+)\)

Substituir com:

this.Platform().App($1).Install()

Isso substitui qualquer chamada ao InstallApp (x) por this.Platform (). App (x) .Install ().

* Não se esqueça de marcar "Usar expressões regulares" nas opções de localização


10

Se você deseja trabalhar com nomes de grupos (usando a mesma amostra acima):

Encontre o que:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

Substituir com:

this.Platform().App(${mygroupname}).Install()

9

Para melhorar as respostas acima: Você deve substituir

_platformActions.InstallApp\((.+)\)

com

this.Platform().App(${1}).Install()

Observe o $ {1} se desejar adicionar um número atrás da captura. $18tentará inserir a 18ª captura de pesquisa, não a primeira com um 8anexo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.