ワイルドカードを使用してNotepad ++で文字を検索/置換する

ワイルドカードを使用してNotepad ++で文字を検索/置換する

このトピックについていくつか調査しましたが、私の特定のニーズにぴったりの解決策を見つけることができませんでした。Notepad++ を使用して Z80 アセンブリ コードを記述しています。すべての ":" 文字を "::" に置き換える必要がありますが、特定のケースのみです。たとえば、次のようなコードがあるとします。

SomeFunction:
  ld a, whatever
  ret

; Remember to do this: blah blah blah

Function2:
  jr z, someWhere

.subfunction:
  ld hl, somePointer
  ret

通常、Ctrl+H を押すだけで、すべての ":" を "::" に置き換えることができます...ただし、この特定のケースでは、行の先頭が "." または ";" の 1 つの ":" 文字を置き換えないようにします。他のすべての ":" は "::" に変更されます。基本的に、最終結果は次のようになります。

SomeFunction::
  ld a, whatever
  ret

; Remember to do this: blah blah blah

Function2::
  jr z, someWhere

.subfunction:
  ld hl, somePointer
  ret

私の言っていることは理解できますか?これには正規表現を使用できる(そして使用すべき)こと、ワイルドカードが関係することはわかっていますが、よくわかりません。どうやってそれをフォーマットしてみます。どうもありがとうございます!

答え1

次のことを試すことができます:

  • 検索対象:^(?=[^\;|\.])(.+\:)$
  • 置換: ``
  • 検索モード: 正規表現

前に

答え2

これにより、コロンがすでに二重になっていないことも確認されます。

  • Ctrl+H
  • 検索対象:^(?![;.]).*?(?<!:):\K(?!:)
  • と置換する::
  • チェック 包み込む
  • チェック 正規表現
  • チェックを外す . matches newline
  • Replace all

説明:

^           # 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 :

スクリーンショット(前):

ここに画像の説明を入力してください

スクリーンショット(後):

ここに画像の説明を入力してください

関連情報