SheepDev

テキスト・正規表現

カンマ区切りを一行ずつにしたい。空の項目は残る?

使うツール

メールに貼られたalpha,beta,gammaを、一行ずつの入力へ移したい。逆に、複数行の一覧を一つの設定値へまとめたい。単純そうですが、連続する区切り、末尾の区切り、値の前後の空白によって結果は変わります。テキスト分割・結合で小さな一覧を往復し、何を項目として扱うかを決めてから、長い一覧へ適用しましょう。

区切る文字と、つなぐ文字を分ける

三項目の入力
alpha,beta,gamma

分割モードを選び、区切り文字をカンマ、結合文字を改行にして実行します。出力はalpha、beta、gammaの三行です。元のカンマは項目の境界として使われ、出力には残りません。次に結合文字だけを『 | 』へ変えれば、同じ三項目をalpha | beta | gammaと表示できます。項目の意味を変えず、出力先が必要とする区切りへ並べ直す操作です。

設定欄へバックスラッシュとnの二文字を入力した場合、文字としての\nと、本当の改行は別です。エスケープ解釈を有効にして\nを使う方法と、実際の改行を入力する方法を区別します。出力に\nが見えたら、処理が壊れたと決める前に設定を確認してください。タブを使う場合の\tも同様で、表示される文字数だけでは区切りの実体を判断できません。

連続するカンマの間には、空の項目がある

空要素を含む入力
alpha,,gamma,

この入力はalpha、空文字、gamma、空文字という四項目です。改行で出力すると最後の空要素が見落としやすいので、接頭辞を[、接尾辞を]、結合文字を | にしてみます。結果が[alpha] | [] | [gamma] | []なら、空の位置を保っています。表示が空白だから不要とは限りません。列の対応や順番に意味がある一覧なら、空要素を消すと後ろの項目がずれてしまいます。

本当に空要素を取り除いてよいなら、それは分割とは別の整理ルールとして決めます。元の文字列と項目数を確認してから行の整理へ渡すと、どの段階で削除したかが分かります。分割結果を見やすくするために付けた[と]は、元の値にはない文字です。そのまま次のシステムへ渡す必要があるかを判断し、確認用の装飾と実際の出力仕様を混ぜないようにします。

前後の空白を消すと、値も変わる

空白の違いを観察する入力
 alpha , beta ,gamma 

前後空白除去を有効にすればalpha、beta、gammaへそろえられます。無効にすれば各項目の前後の空白が残ります。どちらが正しいかは一覧の用途によります。人が書いたラベルをそろえる用途では便利でも、固定幅データや空白を区別するキーでは値を変えてしまいます。先ほどの括弧を使って[ alpha ]のように見せると、残っている空白を目で確認しやすくなります。

空白を一度消した後で結合し直しても、元の文字列の配置は復元できません。分割と結合が互いに逆の操作に見えても、途中で空白除去や接頭辞の追加を行えば、往復後の文字列は変わります。元に戻ることを試験条件にするなら、何も付け足さず、前後空白を保持し、元と同じ区切り文字を使う条件で確かめます。

区切り文字は、正規表現でもCSVの構文でもない

引用符付きのカンマを含む例
alpha,"beta,gamma",delta

このツールでカンマ分割すると、引用符の内側のカンマも区切りになります。CSVとしてはbeta,gammaを一つの値にしたい場合でも、テキスト分割はCSVの引用符を解釈しません。住所や備考を含むCSVを処理するならCSV確認・編集を使います。カンマがある一覧だからといって、すべてが同じ種類のカンマ区切りではありません。必要な文法に合ったツールを選ぶことが大切です。

また、区切り欄に\s+と書いても『一個以上の空白』という正規表現にはなりません。複数種類の空白やパターンをまとめて扱いたい場合は、正規表現テストで一致範囲を確認するなど、別の手順が必要です。区切り文字そのものが項目の値に含まれるなら、エスケープや引用の契約なしに元の項目を一意に復元することはできません。より複雑な形式へ推測で踏み込まないようにします。

結合するときは、最後の空行まで確かめる

結合モードでは、入力の各行が項目になります。alpha、beta、gammaの三行をカンマで結合すればalpha,beta,gammaです。ただしgammaの後に改行があると、末尾の空行が空要素として残り、最後にカンマが付く場合があります。貼り付け時に付いた末尾改行なのか、必要な空項目なのかを先に確認します。都合の悪い末尾を無条件に削除するのではなく、入力元の扱いをそろえます。

SQLの値一覧を作るために接頭辞へ引用符を足すだけでは、値に含まれる引用符やNULLを正しく処理できません。その用途はSQL IN句生成へ渡します。JSON配列を作る場合も、文字列のエスケープを単純な囲み文字で代用しないでください。このツールは形式の構文まで保証する生成器ではなく、決めた文字列操作を行う道具です。出力先の構文があるなら、その構文に対応する機能で確認します。

長い一覧へ適用する前に、通常の項目、空項目、前後空白、末尾改行を含む小さな例で結果を書き出します。残すものと削除するものを明確にしてから同じ設定を使えば、見やすくなったことと情報が保たれたことを別々に確認できます。コピーした結果を次へ渡すときは、項目数と先頭・末尾の値も一緒に照合すると、途中の切り詰めや余分な区切りに気付きやすくなります。

参考資料

使うツール

使い方・解説 →