Notepad++: テキストの一括置換を行う

Notepad++: テキストの一括置換を行う


オンラインで見つけたいくつかの Web ページから辞書ファイルを作成しようとしています。辞書は見出し語をインデックス化して、検索モードで簡単に見つけられるようにします。Web ページの情報は、それぞれ固有の ID を持つセクションに分割されています。たとえば、次のようになります。 <div id="word-2857">Andronicus, Titus . . .
問題は、他のテキストに次のように書かれた他の単語への参照リンクがあることです。<a href="#word-2857"><i>see Titus Andronicus</i></a>

したがって、辞書ファイル (Goldendict 用) を作成するときは、他の単語への参照は次のように記述する必要があります。<a href="entry://headword">text to display</a>

Andronicus の代わりに見出し語 word-2857 を作成して以来、Titus はほとんど役に立たないので、私が (最終的に) やりたいことは、すべての単語 (約 10,000 個あります) のリンクを一括置換することです。つまり、すべての ID リンクを対応する見出し語に置換したいのです<a href="#word-2857"><i>see Titus Andronicus</i></a><a href="entry://Andronicus, Titus">see Titus Andronicus</a>

置換したい単語のリストはすでにあります。問題は、Notepad++ を使用すると、一度に 1 つの一意の置換しか実行できないことです。単語が 10,000 語以上あるため、時間がかかりすぎます。これを簡単に行う方法を教えてください。

ありがとう

答え1

さて、これが私の解決策です。Notepad++ からすべての内容を新しい Excel ワークブックにコピーします。Sheet1 にある必要があります。リストされているすべての「検索」項目を Sheet2 の列 A にコピーします。一致する「置換」項目を Sheet2 の列 B に置きます。Sheet2 にはヘッダーがありません。ヘッダー値も検索および置換されるからです (次のコードで範囲「r」を変更して A2 から開始しない限り)。

次のスクリプトを実行します。

Sub FindReplaceAll()
Dim FindString, ReplaceString As String
Dim r As Range

Set r = Sheet2.Range("A1")

Do While Not r.Value = 0
    FindString = r.Value
    ReplaceString = r.Offset(0, 1).Value

    Sheet1.Cells.Replace What:=FindString, Replacement:=ReplaceString, LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Set r = r.Offset(1, 0)
Loop

MsgBox "Done!"

End Sub

これにより、すべてのエントリが 1 つずつ検索され、置換されます。完了したら、Notepad++ にコピーして戻すことができます。最初の空の行で停止するため、検索/置換の行が連続していることを確認してください。

万が一、Excel マクロ/スクリプトに慣れていない場合は、Excel で Alt + F11 を押し、左側のツリーの VBAProject を右クリックして、[挿入] > [モジュール] を選択します。表示される新しいボックスにコードを貼り付けて、再生ボタン (F5) を押します。

これがお役に立てば幸いです。幸運を祈ります!

関連情報