Exporte todas las coincidencias de expresiones regulares en Textpad o Notepad ++ como una lista

28

En Textpad o Notepad ++, ¿hay una opción para exportar todas las coincidencias para una búsqueda de expresión regular, como una sola lista?

En un archivo de texto grande, estoy buscando etiquetas (palabras encerradas en%%), usando expresiones regulares %\< and \>% , y quiero todas las coincidencias como una sola lista, para poder eliminar duplicados usando Excel y obtener una lista de etiquetas únicas.

Kiranshell
fuente
Si usa el complemento RegexExtract para Notepad ++, puede eliminar los duplicados por usted y no hay necesidad de procesar posteriormente con Excel.
R. Schreurs

Respuestas:

53

Puede lograr esto utilizando las referencias traseras y la funcionalidad Buscar y marcar en Notepad ++.

  1. Encuentre las coincidencias utilizando expresiones regulares (digamos %(.*?)%) y reemplácelas por \n%\1%\n, después de esto tendremos nuestra palabra objetivo en líneas separadas (es decir, ninguna línea tendrá más de una palabra coincidente)

  2. Use la funcionalidad Buscar -> Buscar -> Marcar para marcar cada línea con expresiones regulares %(.*?)%y recuerde marcar ' Marcar línea ' antes de marcar el texto

  3. Seleccione Buscar -> Marcador -> Eliminar líneas sin marcar
  4. Guarda el texto restante. Es la lista requerida.
Ankit
fuente
Tengo un archivo más con <> como etiquetas en lugar de%%, intenté con <(. *?)> Y \ n <\ 1> \ n, pero no funciona, por favor ayuda.
Kiranshell
de nada :) Para mí también está funcionando para <>. ¿Hay anidados <>? ¿Podría explicar qué es exactamente "no funciona"?
Ankit
Estoy tratando de hacer una lista de etiquetas como antes, pero estas tienen <>, estoy usando <(. *?)> En lugar de% (. *?)% Y \ n <\ 1> \ n en lugar de \ n % \ 1% \ n, este es el enlace a un archivo de muestra wikisend.com/download/158050/tags.txt
Kiranshell
Lo intenté nuevamente con el texto proporcionado y usando <(. *?)>, Funciona normalmente. Obtuve la lista de etiquetas <Suministros> <nombre de host> ... y así sucesivamente
Ankit
Mencione el error / problema exacto que tiene. Puede sonar tonto, pero recuerda mover el cursor hacia arriba. A menudo cometo ese error y la búsqueda no devuelve ningún resultado ... :)
Ankit
5

¿Hacer esto en Notepad ++ es un requisito obligatorio? ¿Estás en Windows o alguna forma de Unix? Si está en Windows, puede hacerlo (en parte) desde el símbolo del sistema:

findtr / r "% [az]. * [az] %% [az]%" su_archivo > nuevo_archivo

findstrestá vagamente inspirado grep, por lo que este nuevo_archivo contendrá todas las líneas que coincidan con sus criterios de búsqueda; luego puede usar Notepad ++ para eliminar el texto no deseado (a la izquierda del primer% y a la derecha del segundo).


Y, por supuesto, si estás en Unix, puedes hacer la tarea equivalente con sed.

Scott
fuente
de lejos la mejor respuesta!
Charles-Antoine Fournel
2

Hay un complemento Notepad ++ que puede copiar la expresión regex coincidente en un nuevo archivo en una nueva pestaña. RegexExtract

Como no encontré ningún complemento para Notepad ++ que pueda extraer texto del documento actual o todos los archivos de una ubicación con algunas configuraciones adicionales (como la conversión de mayúsculas y minúsculas), decidí intentar hacerlo yo mismo. (...) La interfaz del complemento es bastante sencilla (...). (...) Los campos "Buscar", "Reemplazar" y "Máscara" usan la sintaxis de expresiones regulares C ++ 11. La extracción de archivos funciona en este momento solo para aquellos en UTF8.

Entrada de diálogo de edición adaptada a la pregunta

ingrese la descripción de la imagen aquí

En la imagen puede ver cómo completar el cuadro de diálogo. Supongo que una palabra no contiene espacios, etc., solo caracteres que coinciden con \ w. Notablemente:

  • Use un par de paréntesis para permitir la selección de la palabra, sin los caracteres de porcentaje.
  • Elija la opción Extraer con reemplazar , para seleccionar la primera coincidencia. De lo contrario, obtendrá una salida en columna de todos los $ 1, $ 2, etc.
  • Marque Saltar $ & ... para omitir las coincidencias completas.
  • Marque Filtro único para informar cada coincidencia solo una vez.
  • Haga clic en Extraer para seleccionar obtener resultados. (La búsqueda solo encuentra las coincidencias, pero no informa).
Greck
fuente
Bonito complemento, hace exactamente lo que se le pidió.
R. Schreurs
Parece que no funciona con el Bloc de notas de 64 bits ++
Ivan Chau
0

En TextPad, aparecerá el Findcuadro como de costumbre, luego usará elMark All botón.

A partir de ahí, use la Copy Bookmarked Linesfunción. (Menú Editar> Copiar otro> Líneas marcadas).

daveloyall
fuente
Personalmente, hago esa operación exacta con tanta frecuencia que configuré un atajo de teclado para la función Copiar líneas marcadas: Ctrl + Alt + c.
daveloyall
Llegué a esta pregunta porque estaba buscando la pregunta Notepad ++. Después de muchos años como usuario fiel y sin pagar de Textpad, me estoy cambiando a Notepad ++ (GPL).
daveloyall