2009-12-01 36 views
11

He estado combatiendo este problema con la ayuda de una hoja de trucos de RegEx, tratando de descubrir cómo hacerlo, pero me rindo ... Tengo este archivo abierto en Notepad ++ y quisiera eliminar todas las líneas que no comienzan con un dígito (0..9). Usaría la funcionalidad Buscar/Reemplazar de N ++. Solo lo menciono porque no estoy seguro de qué aplicación Regex es N ++ usando ... GraciasRegex: eliminar líneas que no comienzan con un dígito

Ejemplo. Desde el siguiente texto:

1hello 
foo 
2world 
bar 
3! 

me gustaría extraer

1hello 
2world 
3! 
no

:

1hello 

2world 

3! 

haciendo una búsqueda/reemplazo en una expresión regular.

+1

He usado este http://stackoverflow.com/a/10731750 Funcionado como un amuleto –

Respuesta

21

Puede borrar esas líneas con ^[^0-9].* pero dejará líneas en blanco.

Notepad ++ usa scintilla, y también usa su motor de expresiones regulares para que coincida con ellos.

\ r y \ n Nunca se emparejan porque en Scintilla, expresión regular las búsquedas se hacen línea por línea (despojado de caracteres de fin de línea).

http://www.scintilla.org/SciTERegEx.html

para aclarar esas líneas en blanco, única manera es elegir el modo extendido, y reemplace \ n \ n \ n, Si se encuentra en las ventanas de cambio de modo \ r \ n \ r \ n para \ r \ n

+0

Oh, está bien, creo que estaré satisfecho con esta explicación. –

+4

un truco inteligente que aprendí más tarde para deshacerme de líneas en blanco en Windows: reemplazar \ n \ r con nada. De esa manera, \ r \ n \ r \ n se convierte en \ r \ n. Cualquier número de "me gusta" en blanco se acortará a \ r \ n. –

+0

Tenga en cuenta la respuesta de Marcador por Peter Perháč. Era justo lo que necesitaba cuando llegué a esta página. (Estoy agregando este comentario a la respuesta aceptada, ya que esa característica puede no haber estado disponible en Notepad ++ cuando la pregunta fue respondida por primera vez.) – jcadcell

7

[^0-9] es una expresión regular que coincide prácticamente con cualquier cosa, excepto los dígitos. Si dice ^[^0-9], lo "ancla" al inicio de la línea, en la mayoría de los sistemas de expresión regulares. Si desea incluir el resto de la línea, use ^[^0-9].+.

+0

también funcionó, pero dejó un montón de líneas en blanco. ¿Cómo puedo capturar el salto de línea también? –

+0

¿Ha intentado agregar '[\ r \ n] *' al final de su expresión? –

+0

Parece que esto solo funciona en "modo extendido" en np ++, pero no en modo regex. – moxn

6

^[^\d].* marca una línea completa cuyo primer carácter no es un dígito. Compruebe si realmente no hay espacios en blanco delante de los dígitos. De lo contrario, tendrías que usar una expresión diferente.

ACTUALIZACIÓN: Deberá hacer ot en dos pasos. Primero vacíe las líneas que no comienzan con un dígito. A continuación, elimine las líneas vacías en modo extendido.

+0

esto funcionó tan lejos como encontrar todas las líneas que no comienzan con un dígito, pero cuando hice una búsqueda/reemplazo, buscando^[^ \ d]. * reemplazándolo con nada, todavía me queda una gran cantidad de líneas en blanco. ¿Cómo podría tener su expresión regular capturar el salto de línea también? –

+0

Puedes intentar primero eliminar todas las líneas con dígitos. Y luego puedes cambiar al "modo extendido". Lo probé y me sirve para encontrar linebreaks aquí con '\ r \ n'. Reemplácelos con nothgin entonces. – moxn

+0

Sí, esa es una manera comprobada de hacerlo, pero esperaba que todo esto se pudiera hacer en un solo paso. Tal vez si estuviera usando algún otro editor, pero es npp, así que estaré contento con hacer esto en dos pasos :) aplausos –

1

No estoy seguro de lo que está preguntando. pero la exp reg para encontrar las líneas con un dígito al comienzo sería ^ \ d. * Puede eliminar todas las líneas que coincidan con las de arriba o, alternativamente, mantener todas las líneas que coincidan con esta expresión: ^ [^ \ d ]. *

+0

Estoy tratando de averiguar qué parte de mi pregunta no está clara. Yo lo editaría, pero creo que soy bastante claro al preguntar cómo 'eliminar líneas que no comienzan con un dígito '. –

+0

lo que no estaba claro para mí era cómo estás tratando de eliminarlo. ahora entiendo que estás usando buscar y reemplazar. intente buscar ^ [^ \ d]. * y reemplace con \ b (que es el carácter de retroceso o alternativley * y esto funcionó para mí en el pasado) búsqueda de^[^ \ d]. * \ R y reemplace por nada (la R debe ser mayúscula)

si este último es "codicioso" como en, borra todas las líneas después de la primera coincidencia, entonces puede intentar reemplazar^[^ \ d] [^ \ R] * No hay nada – codekitty

3

También se podría utilizar la técnica de marcadores en Notepad ++. Comencé a beneficiarme de esta función (hace mucho tiempo, pero hace poco más visible en la interfaz de usuario) no hace mucho tiempo.

Simplemente abra el diálogo buscar, escriba regex para líneas que no comiencen con el dígito ^\D.*$ y seleccione Marcar todo. Esto colocará círculos azules, como canicas, en el canal izquierdo, estos son marcadores de línea. Luego, simplemente seleccione desde el menú principal Buscar -> Marcador -> Eliminar líneas marcadas.

Los marcadores son geniales, puede extraer estas líneas simplemente seleccionando copiar líneas marcadas, abriendo nuevo documento y pegando líneas allí. A veces uso esta técnica cuando reviso archivos de registro.

+0

¡Buen consejo! Para eliminar líneas no coincidentes, también hay "Eliminar líneas no marcadas". A menudo puedo expresar fácilmente lo que quiero conservar; ahora es fácil eliminar el resto. ¡Gracias! – jcadcell

Cuestiones relacionadas