
Investigué un poco sobre este tema, pero no pude encontrar la solución exacta para mi necesidad particular. Estoy usando Notepad++ para escribir código ensamblador Z80. Necesito reemplazar todas las instancias de un carácter ":" con "::", pero sólo en casos específicos. Por ejemplo, digamos que tengo un código similar a este:
SomeFunction:
ld a, whatever
ret
; Remember to do this: blah blah blah
Function2:
jr z, someWhere
.subfunction:
ld hl, somePointer
ret
Normalmente, podría seguir adelante y hacer Ctrl+H para reemplazar todas las instancias de ":" con "::"... sin embargo, en este caso particular, quiero evitar reemplazar el único carácter ":" en las líneas que comienzan con un "." o un ";". Todas las demás instancias de ":", cámbielas a "::" en su lugar. Básicamente, el resultado final sería el siguiente:
SomeFunction::
ld a, whatever
ret
; Remember to do this: blah blah blah
Function2::
jr z, someWhere
.subfunction:
ld hl, somePointer
ret
¿Estoy teniendo sentido? Sé que puedo (y debo) usar una expresión regular para esto y que habría comodines involucrados, pero no estoy seguro.cómoYo empezaría a formatear eso. ¡Muchas gracias!
Respuesta1
Respuesta2
Esto también verifica que los dos puntos no estén duplicados.
- Ctrl+H
- Encontrar que:
^(?![;.]).*?(?<!:):\K(?!:)
- Reemplazar con:
:
- CONTROLAR Envolver alrededor
- CONTROLAR Expresión regular
- DESMARCAR
. matches newline
- Replace all
Explicación:
^ # beginning of line
(?![;.]) # negative lookahead, make sure the next character is not ; or .
.*? # 0 or more any character but newline, not greedy
(?<!:) # negative lookbehind, make sure the previous character is not :
: # a colon
\K # forget all we have seen until this position
(?!:) # negative lookahead, make sure the next character is not :
Captura de pantalla (antes):
Captura de pantalla (después):