
Ich habe zu diesem Thema einige Nachforschungen angestellt, konnte aber nicht die genaue Lösung für mein spezielles Anliegen finden. Ich verwende Notepad++, um Z80-Assemblercode zu schreiben. Ich muss alle Vorkommen eines ":"-Zeichens durch "::" ersetzen, aber nur in bestimmten Fällen. Angenommen, ich habe Code, der so aussieht:
SomeFunction:
ld a, whatever
ret
; Remember to do this: blah blah blah
Function2:
jr z, someWhere
.subfunction:
ld hl, somePointer
ret
Normalerweise könnte ich einfach Strg+H drücken, um alle Vorkommen von ":" durch "::" zu ersetzen... in diesem speziellen Fall möchte ich jedoch vermeiden, das einzelne ":"-Zeichen in Zeilen zu ersetzen, die mit einem "." oder einem ";" beginnen. Alle anderen Vorkommen von ":" werden stattdessen durch "::" ersetzt. Im Wesentlichen würde das Endergebnis so aussehen:
SomeFunction::
ld a, whatever
ret
; Remember to do this: blah blah blah
Function2::
jr z, someWhere
.subfunction:
ld hl, somePointer
ret
Ist das verständlich? Ich weiß, dass ich dafür einen regulären Ausdruck verwenden kann (und sollte) und dass Platzhalter verwendet werden, bin mir aber nicht sicherWieIch würde das formatieren. Vielen Dank!
Antwort1
Antwort2
Dadurch wird auch überprüft, dass die Doppelpunkte nicht bereits doppelt vorhanden sind.
- Ctrl+H
- Finde was:
^(?![;.]).*?(?<!:):\K(?!:)
- Ersetzen mit:
:
- ÜBERPRÜFEN Umwickeln
- ÜBERPRÜFEN Regulären Ausdruck
- DEAKTIVIEREN
. matches newline
- Replace all
Erläuterung:
^ # 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 :
Screenshot (vorher):
Screenshot (nachher):