2008-10-13 21 views
5

Tengo una solución con múltiples proyectos y tenemos que hacer algunos reemplazos globales serios.Global Find and Replace en Visual Studio

¿Hay alguna forma de hacer un reemplazo con comodín donde algunos valores permanecen después del reemplazo?

Así, por ejemplo, si quiero que cada HttpContext.Current.Session [ “whatevervalue”] para convertirse en HttpContext.Current.Session [ “whatevervalue”] habrá. ToString() el valor de cadena que se pasa en ¿respetado? No quiero reemplazar "cualquier valor". Solo quiero agregar un .ToString() donde coincida el patrón.

¿Esto es posible en Visual Studio?

Respuesta

18

En primer lugar, haga una copia de seguridad de sus proyectos, por si acaso ... Siempre es una buena idea antes de realizar reemplazos masivos.

Luego, en la búsqueda/reemplazo de diálogo, seleccione el uso de expresiones regulares casilla:

En el cuadro Buscar, utilizar el patrón:

HttpContext\.Current\.Session\["{[email protected]}"\] 

y en el cuadro Reemplazar, utilice:

HttpContext.Current.Session["\1"].ToString() 
+0

Para uso frecuente de RegEx, uno pensaría que ya lo sabría. ¡Gracias! –

+0

Además, tenga cuidado de probarlo primero; algunas versiones de VS tienen un error de uno por uno en la función de reemplazo de RegEx. – Nick

+0

Si es posible que sus identificadores incluyan citas incrustadas (por ejemplo, Session ["some \" key "]), querrá usar la expresión regular de David Mitchell: http://stackoverflow.com/questions/198984/global-find-and -replace-in-visual-studio # 199010 –

4

Fácil ... use expresiones regulares y agrupamiento.

Encuentra lo que: (HttpContext.Current.Session [ “whatevervalue”])

Reemplazar con: \ 0.ToString();

Recuerde revisar el uso: Las expresiones regulares y seleccione

+0

Debo estar perdiendo algo. Intenté ejecutar una práctica en un conjunto de texto seleccionado antes de plantear una pregunta. Parecía encontrar pero no reemplazar correctamente. Lo intentaré de nuevo, gracias. –

+0

no HttpContext.Current.Session [". @"] Sería un poco mejor? – hova

+0

Votado para el uso de \ 0. –

0

Puede utilizar Visual Assist para este tipo de tareas. Es una herramienta poderosa para diferentes tipos de refactorización.

+0

No para este. – Lev

4

Quiere abrir el expansor "Buscar opciones" y seleccionar la opción "Utilizar expresiones regulares". Después de que hayas hecho esto, usted quiere éstos como su búsqueda/reemplazo entradas:

Encontrar:

HttpContext\.Current\.Session\[{("([^"]|\")*")}\] 

Reemplazar:

HttpContext.Current.Session[\1].ToString() 

Nota adicional:

Una vez que haya Con la opción de expresiones regulares activadas, podrá usar los botones del triángulo que apuntan hacia la derecha para acceder a los fragmentos de la sintaxis Regex de Visual Studio.

También tenga en cuenta que la sintaxis Regex de Visual Studio es bastante ghetto, ya que no ha cambiado desde los días de Visual Studio 6 (¿o antes?), Por lo que no da por hecho ningún elemento de sintaxis.

Por ejemplo, uno podría esperar que mi búsqueda regex anterior se rompa porque la barra diagonal anterior a la comilla doble no se escapó correctamente, pero en realidad, al poner una doble barra invertida se romperá la expresión, no la arreglará.

+0

Gracias por el consejo. Tengo sido un ávido usuario de RegEx Buddy desde que Atwood lo publicó por primera vez hace un tiempo. Nunca me sorprenden las diferencias de sintaxis entre varias implementaciones de RegEx. ¡Gracias por el aviso! –

0

También podría considerar el uso de la herramienta de descarga gratuita disponible en Refactor http://www.devexpress.com/Products/NET/IDETools/RefactorASP/

No hace mucho más que simplemente encontrar & reemplazar, lo que ellos llaman los miembros de cambio de nombre con los nombres más comprensibles. Sus diversas características te ayudarán fácilmente a mejorar tu código.

2

Ninguna de estas respuestas parece funcionar en Visual Studio 2013, ya que esa versión parece haber hecho finalmente el cambio a RegEx estándar. Sin embargo, aquellos que no son expertos en RegEx o aquellos que están acostumbrados a la antigua sintaxis VS Find/Replace RegEx encontrarán que los botones de acceso directo RegEx son muy útiles.

favor ver esta respuesta para más información, incluyendo buscar/reemplazar/envolvente con ejemplos:

Visual Studio 'Find and Surround With' instead of 'Find and Replace'