Atomの正規表現による置換と並び替え 実例サンプル解説集

スポンサーリンク

他のエディタの置換解説ページはこちら

Atomを使った置換(変換・置き換え)の実例集です。単純な置換から、文字の並び替えまで一通り解説します。正規表現による置換(regex replace)と入れ替えをマスターすれば、面倒な作業を短縮することができるようになります。

Atomでの置換の方法

置換と検索のショートカットは、ctrlを押しながらFを押して下側に表示される以下の入力欄で実行します。

【Find in current buffer】の欄に置換前の文字列、【Replace in current buffer】の欄に置換後の文字列を入力します。正規表現(右上[.*])を青いアクティブの状態にしてください。

検索・置換用メタ文字

.任意の一文字*直前文字の0回以上の繰り返し ワイルドカード
  +直前文字の1回以上の繰り返し
  ?直前文字の0~1回の繰り返し
  {n}直前文字のn回の繰り返し
[~]~のいずれか1文字[^~]~に含まれない1文字
[AB]AまたはB  
[0-9]数字1文字  
[a-f]a,b,c,d,e,fの1文字  
\r改行(CR)\d半角数字
\n改行(LF)\w半角英数字とアンダースコア
[\r\n]改行  
\s空白、タブ、改行  
n,t,s,d,w等を\Dのように大文字にすると、それ以外となる。\Dは半角数字以外の文字ということ。

※\は日本語キーボードでバックスペースの左隣、¥のことです。

メタ文字を用いて、色々と検索を試してみましょう。

( ~ )()を使って置換用の区切を行う$置換後文字は $1~ で呼び出します。\1~ではありません。

Atomでは\1~ではなく$1~です。注意してください。

通常の置換

改行コードをカンマ(コンマ)に置換する(カンマがすでに存在している場合のCSV化)

改行コードをカンマに置換(変換)します。元々存在していたカンマを“,”とし、改行コードを変換したカンマは ,に置換します。

置換前の文字列 目的とする文字列
43,279
532aa
43″,”279,532aa
1Find,
Replace“,”
2Find[\r\n]
Replace,
  • 改行は \r 又は \n です。いずれも対象とするため、[\r\n] とします。ただし、全て\nで対応できる場合は\nだけでも良い。
  •  ,が文中にある。この段階で[\r\n]置換をすると、置換後の文字に,が発生しデータ処理に不都合が生じる。2段階置換を行う。前段階として、,“,”に置換をしておく。こうしておくことで、ほとんどのアプリなどで,をCSVの区切り文字ではなく、文字列として判断できるようになる。ただし、場合によっては対応しない場合もあるため、そういった場合は別の文字列、例えばCCCなどに置換しておくとよい。
  • [\r\n]を使って改行を検索し、,に置換する。
  • 事前にカンマを“,”としておくことで、後の作業での予期せぬトラブル発生を防ぐことができる。

置換前の文字を置換後にも使用する

桁表現のカンマ(コンマ)を削除する

置換前の文字列 目的とする文字列
1,2001200
1Find([1-9]),([0-9][0-9][0-9])
Replace$1$2
  •  ,を消すだけの置換では他の部分に影響が出てしまう可能性があるため、おすすめしません。(文書内において全く違う目的で”,”を使用している場合がある)
  • ()を使って置換前の文字を置換後の文字に使用する方法をとる。()によって文字列をグループ化していると考えます。以下は()と対応するイメージ。$0は、” “となってしまいます。$1からカウントです。
    ($1),($2)
  • [1-9] は1~9の数値を意味します。0から999までの数は[0-9][0-9][0-9]と表現し、[0-999]という書き方はできません。テキストエディタは1文字単位で判断をするからです。
  • ( )は置換前の文字を置換後に使用する際に使用します。([1-9])[1-9]に対応する文字が$1([0-9][0-9][0-9])[0-9][0-9][0-9]に対応する文字が$2となります
    1,200
    ([1-9]),([0-9][0-9][0-9])
    $1
     $2

文章を入れ替える(1文字)

置換前の文字列 目的とする文字列
私にとってAはBです私にとってBはAです
1Find(私にとって)(.)(は)(.)(です)
Replace$1$4$3$2$5
  •  .をは任意の1文字を意味します。それはCでもFでも数字でも対応します。
  • 私にとって(.)は(.)です → 私にとって$2は$1です でも構わない。
  • ()を使って置換前の文字を置換後の文字に使用する方法をとる。(上の方法と同じ)
    私にとってABです
    (私にとって)(.)(は)(.)(です)
    $1$2$3$4$5
    $1$4$3$2$5
  • 以上から、順番は \1\4\3\2\5 となることがわかる。
  • です」は置換判定になくても良いが、例えば「私にとってAはBではない」という文章(文字列)があった場合、その文字列も置換してしまうため、「です」を加えた。誤判定対策です。
  • 予期せぬ置換が起こることがあるため、置換対象が全て含まれる範囲内で、できる限り長い文字列にしたほうが良い。

文章を入れ替える(複数の文字列)

置換前の文字列 目的とする文字列
私にとってAAはBBBです私にとってBBBはAAです
1Find(私にとって)(.+)(は)(.+)(です)
Replace$1$4$3$2$5
  •  .の後ろに+を加えれば良い。加えることで()の間の全ての文字を対象にします。.+任意の一文字を1回以上という意味です。他は上記1文字入れ替えと同じです。
  • ()を使って置換前の文字を置換後の文字に使用する方法をとる。(上の方法と同じ)
    私にとってAABBBです
    (私にとって)(.+)(は)(.+)(です)
    $1$2$3$4$5
    $1$4$3$2$5
  • 以上から、順番は $1$4$3$2$5 となることがわかる。
  • 私にとって(.+)は(.+)です → 私にとって$2は$1です でも構わない。
  • です」は必ず加えなければなりません.+に文字数制限がないため、加えないと以下のようになってしまいます。
    私にとってAABBBです
    (私にとって)(.+)(は)(.+)
    $1$2$3$4

    つまり、(です)がない場合は結果として、 私にとってBBBですはAA となってしまいます。

  • 出来る限り文字を加えることは予期せぬ置換を防ぐためにも必要なことです。

その他

ピリオドの置換

置換前の文字列 目的とする文字列
45.23245P232
1Find\.
ReplaceP
  •  .の一文字、ピリオドのみを検索すれば良いように思われますが、ピリオドは正規表現で使用される文字ですから、.だけでは全ての文字列と判断し、結果としてすべての文字を一つ一つPに置換して 45.232 → PPPPPP となってしまいます。ちなみに、.+ とすると 45.232 → P となる。
  • 正規表現のチェックを外せば、.だけでも置換することができます。
  • そこで、\を用います。\.とすれば、.を正規表現用の文字ではなく、単なるピリオドとして扱われるようになります。
    45.232
     \. 
    45P232

スペース(空白文字)

置換前の文字列 目的とする文字列
スペースが” “スペースが “SPACE”
1Find” “
ReplaceSPACE
  • 空白は” “、つまり検索欄にスペースを押して”空白”を直接入力します。は見やすくするために書いており、実際の置換作業ではスペースのみで、は不要です。
  • \sというものもありますが、これはタブとスペース(空白文字)、そして改行も含みます。ですから\sは期待通りの結果にはなりません。

応用

文字を複数回利用してaタグのhtml文を作成する

置換前の文字列 目的とする文字列
,AAA,<a href=”AAA.html”>AAA</a>
1Find(,)(.+)(,)
Replace<a href=”$2.html”>$2</a>
  • 元のデータは,で区切られたCSVデータと仮定。
  • ()を使って置換前の文字を置換後の文字に使用する方法をとる。(上の方法と同じ)
    ,AAA,
    (,)(.+)(,)
    $1$2$3
    <a href=”$2.html”>$2<>/a
  • $2を2回登場させればよい。
タイトルとURLをコピーしました