例 |
正規表現の例 |
数値範囲 |
浮動小数点数 |
メールアドレス |
IPアドレス |
有効な日付 |
数値日付をテキストに変換 |
クレジットカード番号 |
完全な行のマッチング |
重複行の削除 |
プログラミング |
近接する2つの単語 |
落とし穴 |
カタストロフィックバックトラッキング |
過剰な繰り返し |
サービス拒否攻撃 |
すべてをオプションにする |
繰り返しキャプチャグループ |
Unicodeと8ビットの混在 |
このサイトの詳細 |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
すべての行が(アルファベット順またはその他の方法で)ソートされているファイルがある場合、(連続した)重複行を簡単に削除できます。お気に入りのテキストエディタでファイルを開き、次の文字列を検索して置換します。^(.*)(\r?\n\1)+$そして、\1に置換します。これが機能するには、アンカーが行区切りの前後に(ファイルまたは文字列の先頭と末尾だけでなく)一致する必要があり、ドットは改行と一致してはなりません。
仕組みは次のとおりです。キャレットは行の先頭でのみ一致します。そのため、正規表現エンジンは、そこで正規表現の残りの部分との一致を試みます。ドットとアスタリスクの組み合わせは、内容に関係なく、行全体と一致します。括弧は、一致した行を最初の後方参照に格納します。
次に、行区切り文字と一致します。\r?\nに疑問符を追加したのは、この正規表現がWindows(\r\n)とUNIX(\n)の両方のテキストファイルで機能するようにするためです。ここまでで、行とそれに続く改行が一致しました。
次に、この組み合わせの後に同じ行の複製が続くかどうかを確認する必要があります。これは、単純に\1を使用することで実現できます。これは、一致した行を保持する最初の後方参照です。後方参照は、まさにそのテキストと一致します。
後方参照が一致に失敗した場合、正規表現の一致と後方参照は破棄され、正規表現エンジンは次の行の先頭から再び試行します。後方参照が成功した場合、正規表現のプラス記号は、行の追加コピーとの一致を試みます。最後に、ドル記号は、後方参照によって一致したテキストが行全体であるかどうかを正規表現エンジンにチェックさせます。後方参照によって一致したテキストの前に改行があることは既にわかっています(\r?\nによって一致)。したがって、ドル記号を使用して、改行が続くか、ファイルの末尾にあるかを確認します。
全体の一致は行\n行(または行\n行\n行など)になります。検索と置換を行っているため、行、その複製、およびそれらの間の改行はすべてファイルから削除されます。元の行は保持し、複製は保持したくないため、元の行を戻すための置換テキストとして\1を使用します。
上記の例を区切り文字の後(項目)(区切り文字\1)+区切り文字の前に一般化できます。ここで、区切り文字の後および区切り文字の前は長さゼロです。そのため、コンマ区切りリストから連続した複製を削除する場合、(?<=,|^)([^,]*)(,\1)+(?=,|$).
を使用できます。肯定後読み(?<=,|^)は、正規表現エンジンに文字列の先頭またはコンマの後に一致を開始させます。([^,]*)は項目をキャプチャします。(,\1)+は連続した重複項目と一致します。最後に、肯定先読み(?=,|$)は、コンマまたは文字列の末尾をチェックすることで、重複項目が完全な項目であるかどうかを確認します。
| クイックスタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書籍レビュー |
| 正規表現の例 | 数値範囲 | 浮動小数点数 | メールアドレス | IPアドレス | 有効な日付 | 数値日付をテキストに変換 | クレジットカード番号 | 完全な行のマッチング | 重複行の削除 | プログラミング | 近接する2つの単語 |
| カタストロフィックバックトラッキング | 過剰な繰り返し | サービス拒否攻撃 | すべてをオプションにする | 繰り返しキャプチャグループ | Unicodeと8ビットの混在 |
ページURL:https://regular-expressions.dokyumento.jp/duplicatelines.html
ページ最終更新日:2019年11月22日
サイト最終更新日:2024年3月15日
著作権 © 2003-2024 Jan Goyvaerts. All rights reserved.