日々のPC作業で、大量の文書ファイルやデータを扱っているビジネスパーソンの皆さま。こんな経験はありませんか?
- 会議資料の誤字脱字を、何十ページも手作業でチェックした。
- 顧客リストの住所表記を、一つ一つ決まった形式に修正した。
- Webサイトからコピーしたテキストの不要な改行や空白を取り除いた。
- プログラムのソースコードや設定ファイルで、特定のパターンを含む行を探して修正した。
これらの作業、一つ一つは小さなことかもしれませんが、量が多かったり、何度も繰り返したりすると、かなりの時間と労力がかかりますよね。「もっと効率的にできないものか…」そう思ったことがある方は、きっと多いはずです。
実は、これらの「特定のルールに従った文字列を探したり、置き換えたりする」作業を、驚くほど効率化できる強力なツールがあります。それが、「正規表現(せいきひょうげん)」です。
正規表現を使えば、今まで手作業でヒーヒー言いながら何時間もかけていた修正が、ほんの一瞬で完了することも珍しくありません。まさに、PCでのテキスト処理における「魔法の呪文」のようなものです。
この記事では、「正規表現なんて聞いたこともない」という方でも理解できるよう、正規表現の基本から、PCでどう使うのか、そしてビジネスシーンで役立つ具体的な例までを分かりやすく解説します。
そもそも、正規表現って何?
一言でいうと、正規表現とは「文字列のパターンを表現するための特別な書き方」です。
例えば、「電話番号の形式(03-xxxx-xxxx のような形)」や「メールアドレスの形式(xxxx@xxxx.com のような形)」など、決まった「パターン」を持った文字列を表現することができます。そして、このパターンを使って、
- 特定のパターンに一致する文字列を探す
- 特定のパターンに一致する文字列を別の文字列に置き換える
といった処理を、非常に柔軟かつ強力に行うことができるのです。
PCで正規表現を使うには?
正規表現は、単体で使うものではなく、様々なソフトウェアの機能の一部として利用されます。皆さんが普段お使いのPCでも、知らず知らずのうちに正規表現が使える状態になっていることが多いです。
ビジネスでよく使われるアプリケーションやツールで正規表現が利用可能な例としては、以下のようなものがあります。
- テキストエディタ: 秀丸エディタ、サクラエディタ、VS Code (Visual Studio Code)、Emacs, Vim など、多くの高機能なテキストエディタは正規表現を使った検索・置換機能を備えています。
- プログラミング言語: Python, JavaScript, Java, PHP, Ruby など、ほとんどのプログラミング言語で正規表現を扱うための機能が標準で用意されています。
- コマンドラインツール: WindowsのPowerShellやmacOS/LinuxのBashなどで利用できる
grep
コマンドなどは、正規表現を使った強力なテキスト検索が可能です。 - 表計算ソフト: Microsoft ExcelやGoogleスプレッドシートでも、関数などを使って限定的に正規表現のようなパターンマッチングを行う方法があります(ただし、専用の機能ほど強力ではない場合もあります)。
この記事では、最も手軽に始められる「テキストエディタでの検索・置換」をメインに解説します。多くのテキストエディタで、検索・置換ダイアログの中に「正規表現を使用する」「パターンマッチング」といったチェックボックスやオプションがあるので、それらをオンにして使います。
超基本!これだけ知っておけば便利な正規表現の記号
正規表現はたくさんの記号を使いますが、まずはこれだけ覚えておけば、日々の作業がぐっと楽になる!という基本的な記号をいくつかご紹介します。
※PCの画面では見づらい場合は、スマートフォンで表示してください。
記号 | 意味 | 例 | 説明 |
. |
任意の一文字 | a.c |
“abc”, “adc”, “aec” など、aとcの間に任意の一文字が入る文字列に一致します。 |
* |
直前の文字が0回以上繰り返される | ab*c |
“ac”, “abc”, “abbc”, “abbbc” など、aとcの間にbが0回以上繰り返される文字列に一致します。 |
+ |
直前の文字が1回以上繰り返される | ab+c |
“abc”, “abbc”, “abbbc” など、aとcの間にbが1回以上繰り返される文字列に一致します。(”ac”には一致しない) |
? |
直前の文字が0回または1回出現する(省略可能) | colou?r |
“color”, “colour” のどちらにも一致します。 |
[] |
[]内のいずれか一文字 | [abc] |
“a”, “b”, “c” のいずれか一文字に一致します。 |
[a-z] |
aからzまでのいずれか一文字(小文字) | [a-zA-Z] |
aからzまでの小文字、またはAからZまでの大文字のいずれか一文字に一致します。 |
[0-9] |
0から9までのいずれか一文字(数字) | [0-9]+ |
数字が1桁以上続く文字列(例: “123”, “45”, “0”)に一致します。 |
^ |
行の先頭 | ^はじめに |
「はじめに」で始まる行に一致します。 |
$ |
行の末尾 | です。$ |
「です。」で終わる行に一致します。 |
\ |
特殊な意味を持つ文字をエスケープ(無効化)する | \. |
ピリオドそのものに一致させたい場合に使います。(. は任意の一文字の意味を持つため) |
これらは正規表現で使うほんの一部の記号ですが、これだけでもできることが格段に広がります。一度に覚える必要はありませんが、少しずつ使って使いこなせるようになりましょう。
【実践】正規表現を使ってみよう! 簡単例題
それでは、具体的な例を通して正規表現の使い方を見ていきましょう。テキストエディタの検索・置換機能を使いながら試してみてください。
例題1:特定の単語を含む行を探す
資料の中から、「重要」という単語が含まれる行だけを抜き出したいとします。
- 検索する正規表現:
^.*重要.*$
解説:
^
: 行の先頭.*
: 任意の文字(.
)が0回以上(*
)繰り返される。つまり、行の先頭から「重要」という単語が出てくるまでの間の任意の文字列。重要
: 検索したい文字列そのもの。.*
: 「重要」という単語の後から行の末尾までの間の任意の文字列。$
: 行の末尾
この正規表現を使うと、「重要」という単語がどこに含まれていても、その行全体を検索できます。多くのテキストエディタでは、正規表現検索で一致した行を一覧表示したり、別のファイルに保存したりする機能があります。
例題2:日付の表記を統一する
文書中に「2023/10/26」や「2023-10-26」のように、日付の区切り文字が混在しているとします。これをすべて「2023年10月26日」の形式に統一したい場合。
- 検索する正規表現:
([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})
- 置換する文字列:
$1年$2月$3日
解説:
([0-9]{4})
: 数字([0-9]
)が4回繰り返し({4}
)出現するパターンをグループ化(()
)します。これは「年」の部分を捉えます。グループ化された部分は、置換文字列の中で$1
として参照できます。[-/]
: ハイフン(-
)またはスラッシュ(/
)のいずれか一文字に一致します。([0-9]{1,2})
: 数字が1回または2回繰り返し({1,2}
)出現するパターンをグループ化します。これは「月」や「日」の部分を捉えます。それぞれ$2
,$3
として参照できます。- 置換文字列の
$1
,$2
,$3
は、検索パターンで()
でグループ化した部分の内容を参照するための特別な記号です。
この例のように、正規表現の置換機能を使えば、単に置き換えるだけでなく、検索した文字列の一部を再配置したり、別の文字列を追加したりといった柔軟な編集が可能です。
例題3:メールアドレスの形式をチェックする(簡易版)
テキストの中から、メールアドレスらしき文字列を探したい場合。
- 検索する正規表現:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
解説:
[a-zA-Z0-9._%+-]+
:@
マークより前の部分。アルファベット、数字、_
,.
,%
,+
,-
のいずれかの文字が1回以上(+
)繰り返されるパターン。@
:@
マークそのもの。[a-zA-Z0-9.-]+
:@
マークと.
の間にある部分。アルファベット、数字、.
,-
のいずれかの文字が1回以上繰り返されるパターン。\.
: ドット(.
)そのもの。.
は正規表現では任意の一文字を意味するため、\
でエスケープします。[a-zA-Z]{2,}
: ドットの後ろにあるトップレベルドメイン(例: com, jp, orgなど)。アルファベットが2回以上({2,}
)繰り返されるパターン。
これはあくまで簡易的なメールアドレスのパターンですが、多くのメールアドレスをこれで検出できます。より厳密な正規表現は非常に複雑になります。
腕試し!練習問題
解説を参考に、以下の練習問題に挑戦してみましょう。解答は記事の最後にあります。
練習問題1:
以下のテキストの中から、「氏名:」に続いて漢字で氏名が書かれている部分(例:「氏名:山田太郎」)を探してください。氏名は2文字から4文字とします。
連絡先
氏名:山田太郎
住所:東京都新宿区...
電話:090-xxxx-xxxx
氏名:佐藤花子
氏名:田中一郎
メール:...
氏名:加藤健
練習問題2:
以下のテキストで、HTMLタグ(<...>
)で囲まれた部分をすべて取り除いてください。
HTML
<p>これは<b>重要な</b>情報です。</p>
<p>こちらは<i>注意点</i>です。</p>
練習問題3:
以下のテキストで、「Tel: 」の後に続く電話番号の形式を「XXX-XXXX-XXXX」から「(XXX) XXXX-XXXX」に変更してください。電話番号の最初の3桁、次の4桁、最後の4桁をそれぞれグループ化して利用してください。
Tel: 090-1234-5678
メールアドレス:...
Tel: 080-9876-5432
正規表現をマスターするために役立つ書籍
正規表現は奥が深く、慣れるまでは少し難しく感じるかもしれません。しかし、一度基本を覚えれば、PCでの作業効率が劇的に向上します。
もし正規表現をもっと本格的に学びたい、仕事でどんどん活用したい!という方は、以下の書籍が参考になるでしょう。
まとめ
この記事では、PCで文字列処理を行うための強力なツール「正規表現」について解説しました。
- 正規表現は、文字列のパターンを表現するための特別な書き方
- テキストエディタなど、様々なツールで利用できる
- 基本的な記号を覚えるだけで、検索・置換の効率が飛躍的に向上する
- 実践的な例題を通して、具体的な使い方をイメージできたはず
最初はとっつきにくく感じるかもしれませんが、少しずつでも良いので、日々の作業の中で「これは正規表現でできないかな?」と考えてみてください。一度その便利さを知ってしまえば、もう手作業だけの頃には戻れないはずです。
ぜひ、この記事を参考に、あなたのPC作業を爆速化させてください!
練習問題 解答
練習問題1:
- 検索する正規表現:
^氏名:[\u3400-\u4DBF\u4E00-\u9FFF]{2,4}$
解説:
^氏名:
: 行の先頭が「氏名:」であることに一致。[\u3400-\u4DBF\u4E00-\u9FFF]
: Unicodeの漢字の範囲を指定しています。これにより、漢字一文字に一致します。{2,4}
: 直前の文字(漢字)が2回から4回繰り返されることに一致。$
: 行の末尾に一致。
練習問題2:
- 検索する正規表現:
<[^>]*>
- 置換する文字列: (空欄)
解説:
<
:<
そのものに一致。[^>]*
:>
以外の任意の文字([^>]
)が0回以上(*
)繰り返されることに一致。これにより、開始タグの<
の直後から終了タグの>
の直前までの間の文字列に一致します。>
:>
そのものに一致。- 置換文字列を空欄にすることで、一致したHTMLタグ全体を取り除きます。
練習問題3:
- 検索する正規表現:
Tel: ([0-9]{3})-([0-9]{4})-([0-9]{4})
- 置換する文字列:
Tel: ($1) $2-$3
解説:
Tel:
: 「Tel: 」という文字列に一致。([0-9]{3})
: 数字が3回繰り返されるパターンをグループ化(最初の3桁)。$1
で参照。-
: ハイフンに一致。([0-9]{4})
: 数字が4回繰り返されるパターンをグループ化(次の4桁)。$2
で参照。-
: ハイフンに一致。([0-9]{4})
: 数字が4回繰り返されるパターンをグループ化(最後の4桁)。$3
で参照。- 置換文字列で
$1
,$2
,$3
を使って、グループ化された部分を括弧で囲んだり、間にスペースを入れたりして形式を変更しています。