テキストから改行を削除する方法
テキストをテキスト ツールキットに貼り付けます。 1 つの連続したブロックが必要な場合は、検索と置換を正規表現モードに切り替え、\s*\n\s* を見つけて単一のスペースに置き換えます。
段落区切りを維持したい場合は、最初に行のトリミングを使用してから、(?<!\n)\n(?!\n) を見つけてスペースに置き換えます。このパターンは、両側に改行がない改行、つまり段落の途中で折り返された改行と一致し、段落間の二重改行はそのまま残します。
テキストがハード改行で届く理由
PDF からコピーするのが通常のソースです。 PDF には段落がなく、ページ上にテキストが配置されているため、コピーでは視覚的な行が終了する場所に改行が挿入されます。ページ上で 6 行を占めていた段落は、6 行のテキストとして表示されます。
もう 1 つの一般的なソースは、プレーンテキストの電子メールです。古いメール クライアントでは、送信メッセージが 72 文字または 76 文字でハードラップされ、引用符で囲まれた返信ではそれらの区切りが無期限に保持されます。
際立った特徴は、区切りが文の終わりではなく、文の途中、ほぼ同じ段にあることです。これが、段落を機械的に削除できる理由です。実際の段落の区切りは空白行で区切られますが、段落の途中の折り返しは空白行で区切られません。以下のすべてはその違いに基づいています。
段落を維持する: ワンパターンの方法
パターンは次のようになります: 改行が前になく、後にも改行がありません。段落の途中の折り返しが一致します。二重改行内の各改行は片側に改行があるため、どちらも一致しません。
ツールがエラーでパターンを拒否した場合、ブラウザは後読みをサポートしていません。その場合は、より単純な \s*\n\s* 置換を使用してすべてを結合し、テキストを貼り付ける箇所に段落区切りを再導入します。
- 線のトリムを押します。これにより、すべての行から先頭と末尾の空白が削除されるため、段落区切り文字は、改行、空白スペース、および別の改行ではなく、ちょうど 2 つの改行になります。
- 「正規表現」にチェックを入れます。
- (?<!\n)\n(?!\n) を見つけて、単一のスペースに置き換えます。 「すべて置換」を押します。
- カウントを確認してください。これは折り返された行数とほぼ一致し、合計行数よりも段落数ほど小さくなければなりません。
すべてを 1 つのブロックに結合する
引用、検索クエリ、または 1 つのフィールドに入力されるものについては、段落を保護する必要はまったくありません。
正規表現モードでは、\s*\n\s* を検索し、単一のスペースに置き換えます。両側の \s* はインデントと末尾のスペースを同時に吸収するため、後でダブルスペースを個別にクリーンアップする必要はありません。
Windows の行末およびその他の問題
- \n の置換でゼロが報告されるか、浮遊文字が残る場合、テキストには Windows の行末が含まれています。 \r を見つけて、最初に何も置き換えません。これは CRLF を LF に変換し、上記のパターンが動作します。
- ハイフンでつながれた単語が複数行に分割され、「inter-」、「national」の順に結合すると、「international」になります。 「-」を見つけて何も置き換えませんが、そのパターンは散文内の正当なダッシュにも一致するため、最初にカウントを読み取ります。
- 行がスペースで終わり、後読みパターンを使用した場合、二重スペースは存続します。 2 つのスペースを見つけて 1 つに置き換え、2 回実行します。
- 段落間に空白行がないテキストには、保護する信号がありません。エンコードされていない段落境界はどのパターンでも回復できないため、手動で再挿入する必要があります。
このツールの正規表現モードに関する 2 つのこと
パターンはガード内でコンパイルされます。無効なパターンではエラー メッセージが表示され、テキストはそのまま残ります。単独の開き括弧は入力中の通常の中間状態であり、作業が破壊されることはありません。
パターンは、multiline フラグや dotall フラグを使用せずに、グローバル フラグを使用してコンパイルされます。したがって、置換は常にどこにでも適用されます。ドットは改行と一致しません。 ^ と $ は、各行ではなくテキスト全体にアンカーされます。行ごとに動作するには、改行を明示的に一致させます。これが上記のパターンの動作です。
検索フィールドと置換フィールドは単一行入力です。改行を \n と MATCH することはできますが、INSERT することはできません。置換フィールドに入力された \n は、n が続くバックスラッシュとして挿入されます。そのため、上記のメソッドでは改行を戻す必要がありません。
作業例: PDF からコピーされた 2 つの段落
貼り付けられたテキストには、印刷行ごとにハード ブレークがあり、2 つの段落の間に 1 つの空白行が含まれています。改行に / を使用すると、次のようになります。
「委員会は火曜日に会合を開き、3月に提出された/提案を検討した。数人のメンバーが/スケジュールについて懸念を表明した。//修正版は/次回の会議の前に配布される予定である。」
合計 5 つの改行があります。4 つの折り返しと 1 つの段落区切りが 2 つの連続する改行として記述されます。 5人のうち4人は行くべきだ。
- 線のトリムを押します。
- [正規表現] にチェックを入れ、(?<!\n)\n(?!\n) を検索し、スペースで置換し、すべて置換します。
- 報告されたカウントを読み取ります。
結果: このツールは 3 つの置換 (段落の途中で折り返される 3 つ) を報告します。その結果、空白行で区切られた 2 つの段落が連続した 1 行に表示されます。代わりに \s*\n\s* を使用すると、4 が報告され、両方の段落が 1 つにマージされます。これは引用としては正しい答えですが、ここでは間違っています。
ツールを開く
リテラルおよび正規表現の検索と置換には、元に戻す履歴と各ステップ後の置換カウントが含まれます。貼り付けた内容はどこにも送信されません。
これでカバーされないもの
- これは検索と置換であり、リフローではありません。住所ブロック、詩句、箇条書きリストなど、意図的に短い行と文の途中の折り返しを区別することはできません。
- 置換フィールドでは改行を挿入できないため、改行を戻す必要がある手法は別の場所で終了する必要があります。
- 後読みパターンには、後読みアサーションをサポートするブラウザが必要です。古いブラウザは、サイレントに失敗するのではなく、無効なパターンのエラーを報告します。
- 処理はメインスレッドで実行されるため、非常に大きなドキュメントの場合、変換中にインターフェイスが一時停止する可能性があります。
- 元に戻す操作は、最後の 50 件の操作に制限されています。
- 次の訪問の間には何も保存されません。ページをリロードすると、仕様上、作業内容が破棄されます。