¿Cómo puedo recuperar todas las líneas de un documento que contenga "strA", pero no "strB", en el cuadro de búsqueda de Visual Studio?Regex: cómo recuperar todas las líneas que contienen strA pero no strB en Visual Studio
Respuesta
Utilizaría Negative lookarounds pero la expresión es muy compleja si no conoce la posición esperada (o incluso el orden) de los términos. Do ¿conoce el orden o patrón?
De lo contrario te aconsejo utilizar otra herramienta que podría fácilmente bucle (o lista comp) a través de un archivo línea por línea y hacer Instr o Contiene u otro sencillo, más rápido , pruebas lógicas ...
Para Visual Studio 2012 (y versiones posteriores):
^(?!.*strB).*strA.*$
Explicación:
^ # Anchor the search at the start of the line
(?!.*strB) # Make sure that strB isn't on the current line
.*strA.* # Match the entire line if it contains strA
$ # Anchor the search to the end of the line
Es posible que desee agregar (?:\r\n)?
al final de la expresión regular si también desea eliminar los retornos de carro/alimentaciones de línea junto con el resto de la línea.
Esto funcionó. Tuve que extenderme para admitir varias cadenas de exclusión, que resultó ser, p. '^ (?!. * strB) (?!. * strC) (?!. * strD). * strA. * $'. – DuckMaestro
Voy a suponer que el cuadro de búsqueda realmente acepta expresiones regulares generales. El uso de búsqueda negativa hacia delante:
(?!^.*strB.*$)strA
que necesitará para configurar las opciones múltiples (^
y $
partido en el inicio/final de las líneas). Si no puede configurarlo usando las opciones de diálogo, intente:
(?m)(?!^.*strB.*$)strA
Sin embargo, este es probablemente el modo predeterminado en ese motor.
Debe anclar toda la expresión regular, no solo la anticipación. Eso significa poner el '^' * fuera * del lookahead y agregar otro '. *' Delante de 'strA'. Pero no es necesario anclar ninguna parte de la expresión regular al * final * de la línea (es decir, el '. * $' Puede ir). –
Bueno, no sé. Cuando lo miro ahora, lo escribí como "si una línea no contiene strB, combine strA". Todavía me parece correcto, ya que estamos combinando línea por línea. Creo. Leer expresiones antiguas me daña el cerebro. – wds
Para Visual Studio 2010 (y versiones anteriores):
El estudio de la caja de búsqueda visual tiene su propia versión extraña de la sintaxis de expresiones regulares. Esta expresión trabaja conforme a lo solicitado:
^~(.*strB).*strA
^
coincide con el comienzo de una línea. (Típicamente para un editor de texto, no hay opción "multilínea";. ^
y $
coinciden siempre en los límites de línea)
.
coincide con cualquier carácter excepto un salto de línea. (No tan típicamente, parece que no hay un modo "de una sola línea" o "punto-todo" que permita que los puntos coincidan con los saltos).
~(...)
es la construcción "prevenir coincidencia", equivalente (hasta donde sé) a la anticipación negativa ((?!...)
) utilizada por los otros respondedores.
FYI, a partir de Visual Studio 2012, el motor de expresiones regulares dotNet ahora se usa para búsquedas, por lo tanto, la sintaxis extraña debería desaparecer. Buena respuesta, pero ten en cuenta qué versión de VS estás usando. – redcalx
Prueba en Visual Studio 2010 SP1Rel, esta respuesta debe modificarse si "strB" podría ser DESPUÉS de "strA". Pruebe '^ ~ (. * StrB). * StrA ~ (. * StrB)'. O '~ (strB). * StrA. * ~ (StrB)'. – ToolmakerSteve
Esto funcionó para mí con Visual Studio 2010:.
^+ [^ (strB)] + (strA) + [^ (strB)] + $
- 1. Grep Regex: enumere todas las líneas excepto
- 2. Visual Studio Regex '?'
- 3. Linux: eliminando archivos que no contienen todas las palabras especificadas
- 4. Cierre todas las pestañas en Visual Studio
- 5. Regex para todas las cadenas que no contengan una cadena?
- 6. ¿Cómo ordeno las líneas de código alfabéticamente en Visual Studio?
- 7. sed borrar líneas que no contienen una cadena específica
- 8. "Tratar todas las advertencias como errores, excepto ..." en Visual Studio
- 9. ¿Cómo mostrar todas las palabras que contienen estos caracteres?
- 10. Dos archivos que contienen la definición de main() Visual Studio?
- 11. encuentre todas las ocurrencias de comparación con == en visual studio
- 12. Ocultar todas (no) líneas coincidentes en Vim
- 13. Números de líneas relativas en Visual Studio
- 14. Cómo recuperar todas las visitas en lucene.net
- 15. Emacs, eliminando todas las líneas que no coinciden?
- 16. Quiero Spy ++ pero no tengo Visual Studio
- 17. Retire las líneas que contienen no-Inglés (ASCII) de un archivo
- 18. Ejecute todas las pruebas abiertas en Visual Studio
- 19. Cómo encontrar líneas que contienen una cadena en Linux
- 20. Solución de Visual Studio 2010 Buscar todas las referencias que no funcionan
- 21. Eliminar líneas que contienen cierta cadena
- 22. ¿Cerrar todas las ventanas de herramientas en Visual Studio?
- 23. Método abreviado del teclado para cerrar todas las pestañas pero actual en Visual Studio?
- 24. Regex: eliminar líneas que no comienzan con un dígito
- 25. Visual Studio 2010 Publicar Web característica que no incluye todas las DLL
- 26. Seleccionar todas las tablas que contienen columnas específicas
- 27. Eliminar líneas que contienen la palabra clave de un archivo
- 28. ¿Cómo recuperar todas las ID de objeto?
- 29. ¿Cómo obtener todas las coincidencias de regex?
- 30. Reemplace las líneas nuevas, pero conserve las líneas en blanco
haces esto a... una línea de comando, o en algún código? ¿Qué sistema operativo o lenguaje? –
En el cuadro de búsqueda de Visual Studio. – Ricky