空白除去&テキストクリーナー
余分なスペース、タブ、空白行を削除して乱雑なテキストをクリーンアップします。
使い方
- 入力エリアにテキストを貼り付けます。
- 希望のクリーンアップオプションを選択します(デフォルトですべてチェック済み)。
- テキストをクリーンをクリックして処理します。
- クリーンな結果をコピーまたはダウンロードします。
よくある質問
スペースとして何がカウントされますか?
スペース、タブ、改行不可のスペース、その他のUnicodeスペース文字。改行は「空白行」と「改行を折りたたむ」オプションを介して個別に処理されます。
このツールはコンテンツを変更しますか?
いいえ。スペース文字のみを削除または折りたたみます。単語、句読点、その他のコンテンツはそのまま残ります。
コードに使用できますか?
可能ですが、注意が必要です · 先頭スペースを削除するとコードのインデントが破壊されます。クリーンアップ対象を正確に制御するには、個別のチェックボックスを使用してください。
「ホワイトスペース」の実際の意味
ホワイトスペース文字とは、テキストのレンダリング時に可視グリフの代わりに空白スペースを生成する文字で、単語の区切り、行のインデント、段落の区切りに使われる。UnicodeキャラクターデータベースはちょうどU+コードポイント25個に正式なWhite_Spaceプロパティを割り当てている。よく知られているもの(スペース、タブ、改行、キャリッジリターン)がほとんどのケースを占めるが、全リストには非改行スペース(U+00A0)、狭い非改行スペース(U+202F)、U+2000–U+200A範囲の11の欧文タイポグラフィスペース、行区切り・段落区切り(U+2028、U+2029)、数学用中スペース(U+205F)、CJK句読点後に使われる全角スペース(U+3000)も含まれる。
別のグループは不可視に見えるが、Unicodeではホワイトスペースに分類されない:バイトオーダーマーク(U+FEFF)、ゼロ幅スペース(U+200B)、ゼロ幅接合子・非接合子(U+200D、U+200C)、ワードジョイナー(U+2060)、ソフトハイフン(U+00AD)だ。これらはフォーマット制御文字であってスペースではない。「テキストをクリーニングしたのに何かおかしい」という報告の大部分はこれらのどれかに起因する。
このツールの機能:オプション別説明
- 各行の先頭/末尾スペースをトリム:各行の先頭と末尾のホワイトスペースを削除する。メールからインデントされた引用文をクリーニングする際や、コピー&ペースト中に誤って追加された右側パディングを除去する際に便利。
- 複数スペースを1つに圧縮:2つ以上のスペースが連続している箇所を1つのスペースにする。ピリオドの後にスペースを2つ入れるタイプライター習慣(ほとんどの現代スタイルガイド(Chicago、AP)では推奨されていない)を処理する。
- 空白行を削除:空の行またはホワイトスペースのみの行をすべて削除する。PDFからテキストを貼り付けた後によくある需要だ。
- タブをスペースに変換:すべての
\tをスペースに置き換える。コードでは注意が必要だ:PythonとYAMLはホワイトスペースに敏感で、Makefileはレシピ行のインデントにタブを必要とする。 - テキスト全体の先頭/末尾をトリム:文字列全体から先頭と末尾のホワイトスペースを一度に削除する(JavaScriptの
trim()に相当)。 - 複数改行を1つに圧縮:連続する改行文字が1つの改行になる。「空白行を削除」が過剰に削除する場合に、段落区切りの空行1つを保持したいときに便利。
6つのオプションはすべて独立したトグルで(スキップしたいものはチェックを外す)、それぞれ貼り付けたテキストにのみ適用される。何もアップロードされない;クリーニングはJavaScriptの正規表現パスを使ってブラウザ内で行われる。
使う場面
- PDFとWordドキュメント。PDFは各行の視覚的な末尾にハード改行を挿入し、ハイフネーションを保持することもある;貼り付けたWordテキストには数値と単位の間(10 km)、フランス語の句読点前後、またはMr. Smithのような敬称の後に非改行スペースが含まれることが多い。
- ユーザー入力の正規化。「Name」やemailフィールドの末尾スペースは、
"Smith"と"Smith "を等しくない文字列として比較させる。入力時(または検索前)にそれらをトリムすることで、「ユーザーが見つからない」バグのクラス全体を排除できる。 - CSVとTSVの準備。先頭または末尾にスペースがあるフィールド値は、正確な一致キーを期待する下流パーサーを壊す。ExcelのUTF-8 CSVエクスポートはバイトオーダーマークを無音で先頭に付加する。BOMを除去しない下流パーサーはこれを最初の列ヘッダーの一部として見てしまい、
colnameのような奇妙な見た目になる。 - MarkdownとブログのDraft。複数の連続した空行はMarkdownでは1つのブロックとしてレンダリングされるが、ソースファイルを膨らませdiffをノイジーにする。
- メール署名、チャットログ、識別子:別のドキュメントに貼り付ける前や、ホワイトスペースに厳格なAPIにプロモーションコードやライセンスキーを送信する前の素早いクリーンアップ。
よくある落とし穴
- 先頭ホワイトスペースの削除でコードが壊れる。PythonとYAMLはインデントを構文として使用する。削除すると目には同じに見えるがパースできなくなる。
- タブ変換でMakefileが壊れる。GNU makeはレシピ行がタブの代わりにスペースでインデントされていると実行を拒否する。同じ注意がGoのgofmt出力にも当てはまる。
- NBSPは通常のスペースと見た目が同じ。ユーザーは2つの単語の間に単一の「スペース」を見てどんなクリーナーでも捕捉できると思いがちだ。JavaScriptの
\s正規表現はモダンブラウザでは非改行スペースにマッチするが、他の言語(または非常に古い環境)で独自の正規表現を書く場合はNBSPを明示的に指定する必要があるかもしれない。 - MarkdownのTrailing whitespaceには意味がある。Markdown行末の2つのスペースは
<br>の改行を作る。行末トリムを有効にするとこれらの改行が削除される;それらに依存している場合はオプションをオフのままにする。 - Windowsの改行。WindowsソースからコピーされたファイルはCRLF(
\r\n)を使用する。「空白行を削除」と「改行を圧縮」はCRを認識する必要がある;そうでなければ各行末にはぐれた\rが残ることがある。 - ゼロ幅文字はホワイトスペース除去後も残る。ZWSP(U+200B)、ZWJ(U+200D)、ZWNJ(U+200C)、ワードジョイナー(U+2060)、ソフトハイフン(U+00AD)はUnicodeホワイトスペースではない。そのため汎用ホワイトスペースクリーナーはこれらに触れない。クリーニング後もテキストがおかしく感じる場合は、16進ビューワーまたは別の「不可視文字」インスペクターに貼り付ける。
- 入力と出力の比較に注意。このページ内でのクリーニングはコピーまたは閉じた後は元に戻せず、元に戻す履歴がない。必要になるかもしれない場合は元のテキストをどこかに保存しておく。
簡単な技術的背景
このツールはJavaScriptの組み込み正規表現エンジンを使ってすべてブラウザ内で実行される。モダンなエンジン(2015年頃以降のすべてのエバーグリーンブラウザ)のString.prototype.trim()は非改行スペースとバイトオーダーマークの両方を除去する。ECMAScriptの仕様がtrimセットをWhiteSpaceおよびLineTerminatorプロダクションの和集合として定義しているからだ。このリストはタブ、プレーンスペース、NBSP、BOM、欧文タイポグラフィスペース、CR / LF / LS / PS改行をカバーしている。唯一除外されるUnicodeホワイトスペース文字はU+0085(NEL)で、EBCDICから継承された珍しい文字で現代のテキストにはほとんど現れない。
大きな入力の場合、処理の遅い部分は正規表現パスではなく、結果をtextareaに書き戻しDOMを再レンダリングすることだ。数メガバイト程度の入力は最新のラップトップで通常問題ない;それを超える場合はコマンドラインツール(tr、sed、awk、または短いPythonスクリプト)の方が通常速い。
その他の質問
通常のスペースと非改行スペースの違いは?
幅は同じようにレンダリングされるが、非改行スペース(NBSP、U+00A0)はレンダラーにその箇所で改行しないよう伝える。Word、Google Docs、多くのCMSは敬称と姓の間(Mr. Smith)、数値と単位の間(10 km)、または通貨記号の前後に挿入する。これが貼り付けたテキストで最も一般的に見つかる「奇妙な」文字で、2つの単語の間の同じ見た目のギャップがプレーンスペース向けの正規表現に引っかからない理由だ。
ゼロ幅文字やバイトオーダーマークは削除されるか?
JavaScriptのホワイトスペース処理は通常バイトオーダーマーク(U+FEFF)を捕捉する。ゼロ幅スペース(U+200B)、ゼロ幅接合子(U+200D)、ゼロ幅非接合子(U+200C)、ワードジョイナー(U+2060)、ソフトハイフン(U+00AD)は捕捉しない。Unicodeはこれらをホワイトスペースとして分類していないため、設計上ホワイトスペースパスをすり抜ける。これらのどれかがテキストに含まれていると思う場合は、代わりに不可視文字インスペクターが必要だ。
空白行と連続改行が2つの別オプションなのはなぜか?
「空白行を削除」はすべての空行を削除する。結果は段落区切りのない1つの連続したテキストブロックになる。「複数改行を1つに圧縮」は段落間の改行1つを維持し、余分なものだけを削除する。出力で読みやすい段落を保ちたい場合は最初のオプションをオフにして2番目を使う。
文字数制限はあるか?
ハード制限はない。ツールは最新のラップトップで数万文字から数百万文字の範囲のテキストを問題なく処理できる。制限はブラウザのtextareaのパフォーマンスだ:非常に大きな貼り付けはクリーニングステップではなくタイピング中またはコピー中にラグが生じる。
何かサーバーに送信されるか?
いいえ。テキストはブラウザから出ることはない。クリーニングはJavaScriptでローカルに実行され、結果は同じページのtextareaに書き戻される。ロードされた後はオフラインで動作する。同じことがAbsolutoolのすべてのツールに当てはまる。