サクラエディタの達人を目指して

テキストエディタ『サクラエディタ』についての使い方を書いた個人サイトです

ユーザ用ツール

サイト用ツール


sakurapro:tips:regex.html


ここでは正規表現事例集と書いていますが、主に検索/置換をコピペでできるようなものを書いています。

エディタを便利に使う上で、検索と置換は非常に重要になってくるため、事例を書いていきます。

ここで上げきれない事例については正規表現を学ぶことで、より詳しく知ることができるので、達人になるために正規表現について勉強することをお勧めします。

正規表現をマンガで楽しく覚える、画期的な書籍が新登場! 今や、ITの現場にとって基本常識の1つとなった「正規表現」。Webサイトの入力チェック(バリデーション)から複雑なテキスト処理まで幅広く使われています。
本書は、正規表現の検索/置換を試せる「正規表現 簡易チェッカー」を使用し、体験しながら一歩ずつ学んでいきます

正規表現事例集

各行の一番最初にヒットした1文字だけを置換したい

各行にある、一番最初にヒットした1文字だけを置換したい時に利用します。

事例

例えば、以下のような電話帳データがエクセルで管理されていたとします。

名前 ふりがな 電話番号
堅田 勝将 かただ かつまさ 0123456789
森岡 藤助 もりおか とうすけ 9809765612
隠岐 五藤 おき ごとう 3846790182
和知 重良 わち しげよし 7641098453
傑山 尹英 けつざん ただひで 2438788912
佐治 誠可 さじ さねよし 0007882391
菱刈 太郎 ひしかり たろう 3998712343
六角 慶門 ろっかく のりかど 8473620012
佐野 康長 さの やすなが 2906672228
黒川 六大夫 くろかわ ろくだゆう 2099186532

上記は名前メーカーから作りました。

このデータから以下形式のcsvに変更したいという流れです。

堅田 勝将,かただ かつまさ,外線,0123456789
森岡 藤助,もりおか とうすけ,外線,9809765612
隠岐 五藤,おき ごとう,外線,3846790182
和知 重良,わち しげよし,外線,7641098453
傑山 尹英,けつざん ただひで,外線,2438788912
佐治 誠可,さじ さねよし,外線,0007882391
菱刈 太郎,ひしかり たろう,外線,3998712343
六角 慶門,ろっかく のりかど,外線,8473620012
佐野 康長,さの やすなが,外線,2906672228
黒川 六大夫,くろかわ ろくだゆう,外線,2099186532

エクセルからコピーすると、セル間がタブになってしまうのですが、csvではカンマ区切りでないといけないということ、別の情報も別途付与したい(外線/内線)というところ、名前の長さがすべて漢字4文字ではないため、矩形選択できないため、1つ目のタブを置換して入力していくという方法を取ります。

コマンド & 実行結果

最初にヒットしたタブをカンマに置換するコマンドはこちら。

ヒットした文字を置換

置換前には (^.*?)(\t) を入力します。意味合いとしては、

「行頭から次に指定する文字(\t)までの間の最短の文字」

を表しています。

このコマンドにて、黄色い部分が選択されます。

ここで置換後の指定として $1, を指定しています。意味合いとしては、

「1つ目のグループの後ろの文字を , に置換」

を表しています。

これを実行することで以下結果になります。

ヒットした文字を置換

続けて、上の画像の通り、外線と登録したいので、外線も一緒に置換後にしてしています。

最後まで処理したものがこちら。

ヒットした文字を置換

これで最初の期待した表示に変更することができました。

補足

置換後に追加したい文字列に数字が含まれる場合は、${1}01,と{}でくくることで数字を入力できます。


特定の文字列がある行のみ抽出したい

膨大な行数のデータから特定の文字列のみ抽出したいという場合に使える表現です。

事例

今回、行数は少ないですが、以下のテキストからxxのみを取り出したい時に使うコマンドです。

特定文字列抽出

コマンド & 実行結果

特定の文字列がある行のみ抽出したい際のコマンドはこちら。

特定文字列抽出

置換前には ^(?!.*xx).*\r\n を入力します。 意味合いとしては、xxというものが含まれている行ではないものが選択されています。

そのため、置換後を空欄にして実行すると、xxが存在する行以外すべてが削除されます。

特定の文字列がある行のみ削除したい

上の事例とは逆の、特定の文字列がある行のみ削除したいケースです。

事例

上と同じ事例を用います。

特定文字列抽出

こちらから、xxを含む行のみを削除します。

コマンド & 実行結果

特定の文字列がある行のみ削除したい際のコマンドはこちら。

特定文字列削除

置換前には ^.*xx.*\r\n を入力します。 意味合いとしては、xxというものが含まれている行を選択しています。

そのため、置換後を空欄にして実行すると、xxが存在する行すべてが削除されます。

連続したスペースを1つのTABに変更したい

複数の連続したスペースが入力されている状態のものを、1つのTABにしたい。

事例

以下のようなテキストがあります。

スペースをタブに

この文字列には、半角スペースと全角スペースが入り交ざったテキストですが、スペースが1つでもスペースが複数あっても、1つのTABに変換したい時に利用します。

コマンド & 実行結果

コマンドはこちら。

スペースをタブに

置換前には ( +| +) を入力します。 最初のプラスマークの前には半角スペース、2つ目のプラスマークの前には全角スペースを入力しています。

置換後を\tにして実行すると、1つ~複数のスペースが、1つのタブに置換されます。


sakurapro/tips/regex.html.txt · 最終更新: by anzadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki