Buscar y reemplazar texto entre ^ y ~ en Notepad ++

22

Tengo un archivo de texto grande donde quiero eliminar todo el texto entre el símbolo ^ y el símbolo ~. Esto también debe funcionar entre líneas.

Traté de hacer una búsqueda y reemplazo regular usando ^*~en el cuadro Buscar y nada en el cuadro Reemplazar, pero encontró 0 resultados.

Esplendor
fuente

Respuestas:

24

Esto no es posible con una búsqueda y reemplazo regular . Si usa Notepad ++ 6, puede aprovechar el nuevo motor regex que admite PCRE ( fuente ).

Presione Ctrl+ Hpara abrir el cuadro de diálogo Buscar y reemplazar y realice la siguiente acción:

Find what:          \^.*?~
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  checked

Ahora presione Alt+ Apara reemplazar todas las ocurrencias.

La expresión regular en Buscar lo que se compone de la siguiente manera:

  • \^es un literal ^ .
  • .*? es la menor cantidad de caracteres que permite que la expresión regular coincida.
  • ~es un literal ~ .
Dennis
fuente
3
si cambia. *? ~ a [^ ~] * ~ entonces debería funcionar sin requerir / usar PCRE.
barlop
1
@barlop: Tomé Buscar y reemplazar regularmente como modo de búsqueda: Normal , no Buscar y reemplazar usando expresiones regulares. Eso podría haber sido un malentendido. En cualquier caso, si no recuerdo mal, las versiones anteriores a la 6 no admitían patrones de varias líneas.
Dennis
El .*?patrón me funcionó para buscar entre caracteres de ;y <. Entonces, la búsqueda es ENCONTRAR ;.*?<REEMPLAZAR ;con las opciones seleccionadas para Regular expressiony. matches new line
SherlockSpreadsheets
8

Querrás buscar \^.*?~y asegurarte . coincide nueva línea está habilitada:

ingrese la descripción de la imagen aquí

Esto se debe a que ^tiene un significado especial, coincide con el comienzo de una línea. Por lo tanto, tenemos que escapar con una barra invertida \^.

Escribir ^*coincidiría con "cualquier número de inicio de línea en una fila". .*coincide con "cualquier carácter", pero por defecto no coincide con las nuevas líneas.

Der Hochstapler
fuente
2
Tenga cuidado con el comportamiento codicioso de la expresión regular. Si hay varios ~caracteres (o es decir, múltiples coincidencias), esto coincidirá con el primero ^hasta el último ~.
heavyd
@heavyd <question> ¿Estás seguro? </question>. Él ha usado *?que no es codicioso, es perezoso .*?~, nunca coincidirá con más de uno ~. Entonces está bien.
barlop
@barlop: Comentó poco después de que respondiera. Fue una edición ninja.
Der Hochstapler
2

Intente usar esta expresión regular en la sección de búsqueda \^[^~]*~ para reemplazar todo entre ^ y ~ inclusive.

barlop
fuente
y en exclusiva, supongo que eso requiere PCRE, luego haga algo (? <= ^) [^ ~] * (? = ~) No tengo n ++ para probarlo, pero si eso falla, intente cambiar (? <= ^ ) a (? <= \ ^)
barlop
Para exclusivamente, simplemente reemplace con ^~.
Dennis
@ Dennis quiero decir si quiere reemplazar todo entre el ^ y ~ pero sin incluir el ^ y ~
barlop
1
¿No es eso lo que se obtiene si se reemplaza \^[^~]*~con ^~?
Dennis
@ Dennis, oh, ya veo lo que quieres decir, buen punto.
barlop
0

Tuve un requisito de reemplazo similar ENTRE caracteres iniciales y finales. Esto vino del correo electrónico de Outlook; cientos de miembros y solo quería los nombres de las personas con todo eliminado entre <RemoveTextHere> .

Original

First1 Last1 <[email protected]>; First2 Last2 <[email protected]>; First3 Last3 <[email protected]>; First4 Last4 <[email protected]>;

Dennis estaba cerca de mi solución, Find what: \^.*?~pero tuve que cambiar mis caracteres literales y Find what: \<.*?>luego tuve que eliminar la primera barra Find what: <.*?>.

Actualizado Find what: <.*?> ; Reemplazar vacío.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_ _

Caracteres especiales : *, $, \, +, ^, (y ), [, ], {y}

Jerry Jeremiah describe los caracteres especiales aquí /programming/37742519/notepad-wildcard .

SherlockHojas de cálculo
fuente
Eso no responde la pregunta.
Toto