2010-02-19 46 views
39

Tengo una parte del archivo fuente HTML que contiene cadenas que quiero seleccionar y copiar a la vez, utilizando la funcionalidad de expresiones regulares de Notepad ++.Cómo copiar el texto marcado en el bloc de notas ++

Aquí está una parte de la fuente de texto:

<option value="Performance" 
>Performance</option> 
<option value="Maintenance" 
>Maintenance</option> 
<option value="System Stability" 
>System Stability</option> 

estoy usando la expresión regular "[0-9a-zA-Z ]*" para buscar los valores de "valor". También he seleccionado la función en Notepad ++ search para resaltar/marcar el texto encontrado. Esta multa de trabajo ahora quiero copiar o cortar solo el texto resaltado en el portapapeles para su posterior procesamiento. Pero no puedo encontrar esta funcionalidad en Notepad ++. ¿Esto simplemente no es posible o soy demasiado tonto?

+0

No estoy familiarizado con la libreta ++, pero hace el trabajo no Ctrl-C (como lo hace en el resto de Windows), o están buscando una scriptable forma de hacerlo, o qué? –

+0

Ctrl-C no copia las cadenas. Parece que Notepad ++ tiene diferentes formas de marcar y resaltar texto en el búfer. El texto que coincide con la expresión regular se resalta con un color, el texto marcado con el mouse, por ejemplo, se resalta en gris. Este texto se puede copiar con Ctrl-C. Pero no puedes marcar diferentes partes del texto a la vez. – Alex

+0

[La respuesta de Ankit] (http://superuser.com/questions/477628/export-all-regular-expression-matches-in-textpad-or-notepad-as-a-list) en superusuario es una forma de hacerlo usando solo el Bloc de notas ++ – Fidel

Respuesta

18

Tal vez puedas probar:

En primer lugar, fijar la línea problema de fin: (Notepad ++ no permite multilínea expresiones regulares)

de búsqueda [Extended Mode]:\r\n> (o en su propio finales de línea del sistema)

Reemplazar:>

entonces

de búsqueda [Modo de expresión regular]:<option[^>]+value="([^"]+)"[^>]*>.*

(si desea que todas las ocurrencias de value en lugar de sólo las opciones, sencillo quitar el líder option)

Reemplazar:\1

Explicación de la segunda expresión regular:

<option[^>]+  Find a < followed by "option" followed by 
       at least one character which is not a > 

value="   Find the string value=" 

([^"]+)   Find one or more characters which are not a " and save them 
       to group \1 

"[^>]*>.*  Find a " followed by zero or more non-'>' characters 
       followed by a > followed by zero or more characters. 

Sí, está analizando HTML con una expresión regular - these warnings aplicar - verifique la salida con cuidado.

+0

+1 estaba a punto de publicar algo similar a esto. Buena respuesta. – Beanish

+0

Muchas gracias Beanish! –

+0

Esta podría ser la dirección correcta. Pero el grupo \ 1 solo contiene el primer valor, aquí "Rendimiento". el resto no se almacena en grupo. – Alex

1

No, a partir de Notepad ++ 5.6.2, esto no parece posible. Aunque la selección de columnas (Alt + Selección) es posible, obviamente no se implementan múltiples selecciones y, por lo tanto, tampoco son compatibles con la función de búsqueda.

+0

Lo extraño es que 5.6.6 permite resaltar las partes de texto coincidentes en algún color, solo no permite ponerlo en el portapapeles. – Alex

78

A partir del Notepad ++ 5.9 agregaron una característica para 'Eliminar líneas no marcadas' que se puede utilizar para quitar todo lo que no desea junto con un poco de búsqueda y reemplaza para el otro texto en cada línea de valor.

  1. Utilice la Búsqueda -> Buscar -> funcionalidad Marcar para marcar cada línea que desea mantener/copiar y recordar que marque 'Marca Línea' antes de marcar el texto
  2. Seleccione Buscar -> Bookmark- -> Eliminar líneas no marcadas
  3. Usar Buscar -> Buscar -> Reemplazar para reemplazar otro texto que no desee conservar/copiar sin nada
  4. Guarde el texto restante o cópielo.

También se puede hacer una cosa similar usando la búsqueda -> Señal -> Copiar con marcador Líneas

Así que técnicamente aún no puede copiar el texto marcado, pero se puede líneas de marcador con el texto marcado y luego realizar diversas operaciones en líneas marcadas o no marcadas.

+0

punta excelente, justo lo que necesitaba, ¡gracias! – montrealist

+0

+1 - Un pequeño consejo y muy útil cuando se pescan (grandes) archivos de registro para entradas específicas. – CraigTP

+0

funciona. Gracias. –

19

Estoy agregando esto para que esté completo ya que esta publicación tiene un alto puntaje en los resultados de búsqueda de Google.

En realidad, puede copiar todo de una búsqueda de expresiones regulares, pero no en un solo paso.

  1. Use Marcar en Buscar e ingrese la expresión regular en Buscar qué.
  2. Seleccione Línea de marcador y haga clic en Marcar todo.
  3. Haga clic en Buscar -> Marcador -> Copiar líneas marcadas.
  4. Pegue en un nuevo documento.
  5. Es posible que deba eliminar algún texto no deseado en la línea que no formaba parte de la expresión regular con una búsqueda y reemplazo.
+1

N º 5 en esta lista es la parte que consume mucho tiempo para mí. Dado que el texto marcado con copia obviamente no es compatible con NotePad ++, recurrí a otra pieza de software libre: Expresso by Ultrapico. Pegué todo el texto en el panel "Texto de muestra" de Expresso, y la misma búsqueda de expresiones regulares que había preparado en Notepad ++ en el panel "Expresiones regulares". A continuación, presioné "Ejecutar coincidencia", hice clic con el botón derecho en el "Panel de resultados de búsqueda"/"Copiar texto coincidente en el portapapeles". –

0

Tuve el mismo problema. Puede enumerar las coincidencias de expresiones regulares en una nueva pestaña, cada coincidencia en una nueva línea en el Editor de PSPad, que es muy similar a Notepad ++.

Pulse Ctrl + F para buscar, compruebe la expresión regular, ponga la expresión regular y haga clic en Lista.

5

Sería una gran característica en Notepad ++. Yo uso la siguiente técnica para extraer todos los partidos de un archivo:

powershell 
select-string -Path input.txt -Pattern "[0-9a-zA-Z ]*" -AllMatches | % { $_.Matches } | select-object Value > output.txt 

Y si desea sólo los partidos distintos en una lista ordenada:

powershell 
select-string -Path input.txt -Pattern "[0-9a-zA-Z ]" -AllMatches | % { $_.Matches } | select-object Value -unique | sort-object Value > output.txt 
+1

totalmente basura, tu eres un salvavidas – dbinott

+1

¡Increíble! Mucho mejor que las soluciones de Notepad ++. – blindstuff

0

que no es posible con el Bloc de notas, pero está aquí la solución fácil:

Usted necesitará el programa gratuito v3.1 Expresso http://www.ultrapico.com/ExpressoDownload.htm

I recurrió a otra pieza de software libre: Expresso by Ultrapico.

  1. Una vez instalado, vaya a la pestaña "Modo de prueba".
  2. Copie su REGEX en el panel "Expresiones regulares".
  3. Pegar todo el texto a buscar en el panel "Texto de ejemplo" de Expresso,

  4. Pulse el botón "Ejecutar partido". Haga clic derecho en el "Panel de resultados de búsqueda" y "Exportar a ..." o "Copiar texto coincidente en el portapapeles".

N.B .: El autor original es @Andreas Jansson pero está escondido en un comentario, por lo que desde esta página es alto clasificado en la búsqueda de Google lo dejo aquí por otros.

0

Esto es similar a https://superuser.com/questions/477628/export-all-regular-expression-matches-in-textpad-or-notepad-as-a-list.

espero que usted está tratando de extraer:
"Performance"
"Mantenimiento"
"Sistema de Estabilidad"

Aquí es la forma - Paso 1/3: Abrir Buscar-> Buscar-> Reemplazar pestaña, seleccionar el botón de Radio de expresión regular. Introduzca en Buscar qué: (\ "[a-zA-Z0-9 \ s] + \") y en Reemplazar con: \ n \ 1 y haga clic en Reemplazar todo botón. Before Clicking Replace All

Paso 2/3: Después del primer paso, sus palabras clave estarán en las líneas siguientes (como se muestra en la imagen siguiente). Ahora ve a la pestaña Marca e ingresa la misma expresión regular en Buscar qué: Campo. Ponga marca de verificación en la línea de marcadores. Luego haz clic en Marcar todo. Bookmark the lines

Paso 3/3: Ir a Buscar -> Marcadores -> Eliminar las líneas no marcadas. Remove Unmarked lines

Así que tienes el resultado final de la siguiente manera Final Result

Cuestiones relacionadas