簡単に文字列を検索、置換しましょう。
まとめ (TL;DR)
文字列・テキストを検索・置換するこの簡単なアプリケーションの説明をします。 その後、検索・置換で重要となる正規表現について簡単に説明をします。
バックグラウンド
仕事や事務作業をしているとテキストや文字列の検索や置換という操作はよく出てきます。IT に詳しい人の場合は、適切なエディタで正規表現を駆使したり、プログラムを探して実行したり、Python などで簡単なプログラムを自分自身で作成したりします。業務内容によってはデータサイエンティストのようにビッグデータと統計を処理するような複雑な処理をする必要もあります。
この記事で対象とするのは、非エンジニアの方や駆け出しの方になります。データを検索するときは画面を凝視して数えたり、印刷して数えたり、検索機能で1キーワードずつ追いかけたりしている方。置換する時は1つ1つ消して、書き直したり、ペーストしたり。ひとつひとつの作業は小さいのですが、数が多くて嫌気がさすようなことが多いと思います。しかしながら気を抜くと単純ミスをしてしまい気まずいことにもなったりします。
まずはこの記事の機能で簡単な方法があるということを知っていただければ幸いです。その後は沼にハマってしまうかもしれないのでご用心。
使い方
入力欄にテキストを入れます。長い文章でも大丈夫です。入力欄の高さが足りない場合は上にあるスライダーで調整できます。また一気に消したい場合はスライダーの右端にある × ボタンを押してください。
検索・置換したい内容を入れます。事前によく使う条件をタグとして表示しているので、それをクリックすることで選択できます。
- 「Aa」は大文字・小文字を区別するかどうか。チェックを入れると大文字と小文字を区別します。
- 「*」は正規表現を使うかどうか。チェックを入れると正規表現モードになります。
- 「👀」はこの条件を無効にするかどうか。チェックを入れると入力した条件が無効になります。
- 不要な場合は「×」ボタンで削除。
- 最小化したい場合は「_」ボタンで最小化。
- 検索に一致した件数が一番下に表示されます。
- 検索・置換の条件はいくつも指定することができます。
- 置換された結果はリアルタイムで下側のテキストエリアに表示されます。クリップボードへのコピーもボタンを押せば完了します。
正規表現について
正規表現は非常に強力なツールです。これを知っているか知らないかだけで、作業効率は少なくとも10倍は違ってくるものです。 正規表現の入門として、以下の記事がとても役に立ちます。
Regular Expression Language - Quick Reference : Microsoft Build
また正規表現がどのように働くのかは以下のツールが分かりやすいです。
ここではこの機能で事前に用意されている正規表現を使って説明します。
そもそも正規表現とは何でしょうか。色々な定義がありますが、ここではごく簡単に「色々なパターンの文字列を一気に片づける技」ということにします。全く正しい表現ではないですが、入門的な意味合いでは十分だと思います。なぜなら正規表現がどういう時に使えるのか、いかに実用的なのかということさえ頭の片隅にあれば、必要な時に使おうと思い出してもらえるからです。
通常、検索する際は検索したいワードを入力します。「検索」「入門」などです。正規表現も同じですが、一気に片づけるために正規表現には特殊な文字や文法が用意されています。これらを組み合わせることで、一気に片づけることが可能になります。以下によく使うものだけ示します。
特殊文字 | 説明 | 例 | 一致 |
---|---|---|---|
. | 何でもいいから1文字 | . | Z |
+ | その直前の文字が 1 回以上繰り返す | A+ | AAA |
* | その直前の文字が 0 回以上繰り返す | AB*A | AA |
? | その直前の文字が 0 回か 1 回だけ一致 | AB?A | ABA |
| | OR 条件 | AA|BB | AA |
[...] | 括弧の中の文字のどれか1つに一致 | [123] | 3 |
(...) | 括弧のなかをグループとしてまとめる | a(bc) | abc |
{n,m} | 直前文字の最低繰り返し回数と最大繰り返し回数を指定 | A{3,5} | AAA |
\t | タブ | ||
\n | 改行 | ||
\s | 空白 1 文字 | ||
\d | 数字1文字 | ||
\D | 数字以外の1文字 | ||
\w | アルファベット・アンダーバー・数字 | ||
^ | その直後の文字が行の先頭 | ^aba | aba... |
\$ | その直前の文字が行の末尾 | end\$ | the end |
事前に用意されているサンプルの解説
連続する空白 (2つ以上の空白)
\s{2,}
先頭の空白
^\s+
末尾の空白
\s+$
空行(行の先頭が改行、行の末尾が改行)
^\n$
利用されている技術について
正規表現の定義(Javascript)
let re = /ab+c/; let re = new RegExp("ab+c");
一致する文字列があるかどうか?
let re = /ab+c/; re.test("abbbbbbbbbbbc"); // -> true re.test("ac"); // -> false
一致する条件で全て置換する。g は全体を検索、m は複数行を検索させるためのオプション。
let re = new RegExp("ab+c", "gm"); "abbc is wrong. ac is right. abbbbbbbc!".replace(re, "He"); // -> "He is wrong. ac is right. He!"
さいごに
ごくごく簡単なものになります。 何かのお役に立てれば幸いです。