正規表現を使ってみよう!基礎から応用まで
大量のデータを編集したいとき、手作業で一つ一つ編集していてはとても時間がかかってしまいます。
そんな時にとても役に立つのが正規表現と呼ばれるものです。
正規表現では、ルールを設定するとそのルールに従って自動的にデータを検索したり置き換えたりすることが可能です。
※今回の記事では正規表現の記法に重点を置いて説明します。Excelでの使い方などは記載していません。
使われている身近な例
もっとも普段の生活に身近なものは、SNSでのURLの抽出です。
SNS(LINEやX、Facebook)などでURLを打つと、自動的にリンクに切り替わります。
これは、正規表現によってURLを探し、リンクに置き換えるというプログラムが動いています。
例えばこのようにしてURLを取得できます。
https?:\/\/.+\.[a-z]{2,}+.*
それぞれの記号には意味があり、それらを組み合わせることで数多くのパターンに対応させることができます。
正規表現を使ってみよう
正規表現で置き換えをしてみましょう。
今回はWeb上で簡単に置き換えができる文字列置き換えツールを使ってみます。
アクセスしたら、通常モードから「正規表現」に切り替えましょう。
テスト用データとして、以下のデータを左側の入力欄に入れてください。
あいうえお
アイウエオ
ABCDEFG
abcdefg
1234567890
090-0000-1111
[email protected]
そうすると右側に変換結果がリアルタイムで出力されます。
今は何も設定していないので、そのままのテキストが表示されます。
ではまず、ひらがなを消してみましょう。
次のように対象に入力しましょう。
[あ-ん]
すると、「あいうえお」が消えていることが分かります。(改行は消えていません)
これは、「あ」から「ん」までの文字を対象として、「」に置き換えています。
変換に何も入力していないので、対象となった文字は空白「」となり、消えてしまいます。
今度は数字とアルファベットをすべて「※」に置き換えてみましょう。
次のように入力してください。
対象 | 変換 |
[A-z0-9] | ※ |
このように簡単に対象だけを置き換えることができました。
他にも大文字だけなら[A-Z]、小文字だけなら[a-z]というように切り替えることで細かく対象を変えられます。
次に、応用編として電話番号を編集して、下一桁だけの表示にしてみましょう。
(例)090-0123-4567 の場合 ***-****-4567 に置き換える
次のように入力してください。
対象 | 変換 |
[0-9]{3}-[0-9]{4}-([0-9]{4}) | ****-****-$1 |
{n}には、「前の文字をn回繰り返す」という意味があります。
さらに最後の4桁にはカッコ()でくくっていますが、このカッコでくくったところは変換するときに$1 $2のように順番に利用することができます。
最後に上級編として、データの並びを分かりやすく表示するサンプルをご紹介します。
20231012,太郎
20231014,次郎
20231015,三浪
対象 | 変換 |
([0-9]{4})([0-9]{2})([0-9]{2}),(.+?),(.+) | $4さんが$1年$2月$3日に$5しました。 |
このように、正規表現を使うと元の順番さえもお構いなしにデータの置き換えができます。
ちなみに「.」は改行以外の1文字。「+」は前の文字が1回以上繰り返す。
という意味があります。
正規表現の記法一覧
正規表現のそれぞれの記号や記述方法を一覧としてまとめています。
記法 | 意味 | 記法 | 意味 |
---|---|---|---|
[A-Z] | 大文字のアルファベット1文字 | * | 前の文字が0回以上の繰り返し |
[0-9] | 数字1文字 | + | 1回以上の繰り返し |
[abcde] | a,b,c,d,eのうち1文字 | ? | 0または1回の出現 |
[!-~] | 半角1文字 | {n} | n回の繰り返し |
\w | アルファベットか数字、アンダースコア1文字 | {n,m} | n回からm回の繰り返し |
\W | \w以外の1文字 | . | 改行以外の1文字 |
\d | [0-9]と同じ | ^ | 行頭 |
\D | \d以外の1文字 | $ | 行末 |
\n | 改行 | (aiueo|abcde) | aiueoかabcdeのいずれか |
\t | タブ | () | グループ化 |
(ABC)? | ABCがある、もしくはない | *? | *の最短マッチ |
(?=abc) | abcの文字の直前の位置 | +? | +の最短マッチ |
(?<=) | abcの直後の文字 | \ | 直前のメタ文字のエスケープ |
(?!abc) | abc以外の直前の位置 | (?: ) | 参照無しでグループ化 |
参考
参考にさせていただいたサイトです。