![Notepad++/同じ始まりで異なる終わりを持つ行を見つけるための正規表現](https://rvso.com/image/1304074/Notepad%2B%2B%2F%E5%90%8C%E3%81%98%E5%A7%8B%E3%81%BE%E3%82%8A%E3%81%A7%E7%95%B0%E3%81%AA%E3%82%8B%E7%B5%82%E3%82%8F%E3%82%8A%E3%82%92%E6%8C%81%E3%81%A4%E8%A1%8C%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE.png)
そこで、少し調べてみたところ、NotePad++ では「通常の」正規表現が使用されていないことがわかりました (SciTE に戻ろうかと考え始めています)。しかし、私の質問は次のとおりです。
冗長なデータを含むエクスポートされたデータのリストがあり、それをクリーンアップして、アドレス帳にインポートするための適切な CSV に変換しようとしています (FAX サーバー ソリューションを移行しています。古いものは非常に古いため、エクスポートにはこれが最善の方法です)。
各エントリグループから削除しようとしている行は常に
エントリー: NAME ~
そして、各エントリ グループに固有の 12 桁の英数字 (16 進数のようです) コードが続きます。いくつかのエントリ グループでは、「NAME」の後に人間が判読できるエントリがありますが、これらは手動で削除できるほど少ないため、一致させるのはそれほど大変な作業ではありません。
そこで、Entry: で始まるすべての行を検索し、行の最後まで選択します。各グループの各エントリは別々の行にあります。次に、検索と置換を使用して、これらの行をリストから削除します。
更新: 入力と出力
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: John
FamilyName: John
DearName: John
Organisation: Acme 1 Corp
Via: FAX-ANY 1(555) 123-4567
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: Sam
FamilyName: Sam
DearName: Sam
Organisation: Acme 2 LLC
Via: FAX-ANY 1(555) 890-1234
ここに 2 つのエントリ グループがあります。各グループから「Entry:」で始まる行を削除します。
答え1
もう一つの選択肢は
^Entry: NAME .*
Entry: NAME
これは、で始まる行とそれ以降の行を検索します。
答え2
使用
^Entry: NAME ~\d+$
検索パターンは要求どおりに機能しているようです。
個人的には、より一般的なプレースホルダーではなく、プレースホルダー (から まで\d
の範囲内の任意の 1 桁の数字に一致)を使用して一致させることをお勧めします。実際、次のようにする必要があります。0
9
.
^Entry: NAME ~\d{12}$
期待していることを指定するその通り12 桁の数字が連続して表示されます。こうすることで、エントリに予期しない内容が含まれている場合でも、誤って置き換えてしまうことがなくなります。
文字列が 16 進表記になっている場合は、次のようにします。
^Entry: NAME ~[0-9a-fA-F]{12}$
最後の 2 つの例が Notepad++ で正しく動作するかどうかは確認していませんが、私の知る限り、これらはすべてかなり基本的な構文です。