クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現の例
数値範囲
浮動小数点数
メールアドレス
IPアドレス
有効な日付
数値日付をテキストに変換
クレジットカード番号
完全な行のマッチング
重複行の削除
プログラミング
近接する2つの単語
落とし穴
カタストロフィックバックトラッキング
過剰な繰り返し
サービス拒否攻撃
すべてをオプションにする
繰り返しキャプチャグループ
Unicodeと8ビットの混在
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能なPDF
このサイトについて
RSSフィードとブログ
RegexBuddy—The most comprehensive regular expression library!

ファイルから重複行を削除する

すべての行が(アルファベット順またはその他の方法で)ソートされているファイルがある場合、(連続した)重複行を簡単に削除できます。お気に入りのテキストエディタでファイルを開き、次の文字列を検索して置換します。^(.*)(\r?\n\1)+$そして、\1に置換します。これが機能するには、アンカーが行区切りの前後に(ファイルまたは文字列の先頭と末尾だけでなく)一致する必要があり、ドットは改行と一致してはなりません。

仕組みは次のとおりです。キャレットは行の先頭でのみ一致します。そのため、正規表現エンジンは、そこで正規表現の残りの部分との一致を試みます。ドットアスタリスクの組み合わせは、内容に関係なく、行全体と一致します。括弧は、一致した行を最初の後方参照に格納します。

次に、行区切り文字と一致します。\r?\n疑問符を追加したのは、この正規表現がWindows(\r\n)とUNIX(\n)の両方のテキストファイルで機能するようにするためです。ここまでで、行とそれに続く改行が一致しました。

次に、この組み合わせの後に同じ行の複製が続くかどうかを確認する必要があります。これは、単純に\1を使用することで実現できます。これは、一致した行を保持する最初の後方参照です。後方参照は、まさにそのテキストと一致します。

後方参照が一致に失敗した場合、正規表現の一致と後方参照は破棄され、正規表現エンジンは次の行の先頭から再び試行します。後方参照が成功した場合、正規表現のプラス記号は、行の追加コピーとの一致を試みます。最後に、ドル記号は、後方参照によって一致したテキストが行全体であるかどうかを正規表現エンジンにチェックさせます。後方参照によって一致したテキストの前に改行があることは既にわかっています(\r?\nによって一致)。したがって、ドル記号を使用して、改行が続くか、ファイルの末尾にあるかを確認します。

全体の一致は行\n行(または行\n行\n行など)になります。検索と置換を行っているため、行、その複製、およびそれらの間の改行はすべてファイルから削除されます。元の行は保持し、複製は保持したくないため、元の行を戻すための置換テキストとして\1を使用します。

文字列から重複項目を削除する

上記の例を区切り文字の後(項目)(区切り文字\1)+区切り文字の前に一般化できます。ここで、区切り文字の後および区切り文字の前は長さゼロです。そのため、コンマ区切りリストから連続した複製を削除する場合、(?<=,|^)([^,]*)(,\1)+(?=,|$).

を使用できます。肯定後読み(?<=,|^)は、正規表現エンジンに文字列の先頭またはコンマの後に一致を開始させます。([^,]*)は項目をキャプチャします。(,\1)+は連続した重複項目と一致します。最後に、肯定先読み(?=,|$)は、コンマまたは文字列の末尾をチェックすることで、重複項目が完全な項目であるかどうかを確認します。