こんにちは。コツコツと業務を行いながらも効率がイマイチの周です。
さて、みなさんは「効率」に悩む場面はありますでしょうか。
CASE 1
あー、金額は円表記じゃあかん、¥にしたい。一個ずつ変更するのはすごく手間や。最初から決めておいたらよかったなぁ…CASE 2
「A.105-301」から「A-105-301」のように、製品の型番表記を変更したい 。記号一つの変更なのに、全てを変更するとなると一つずつじゃ…
上記のような場合、一定のルールがありますが、動的に変わる部分があって、一致できないので、ただ単に文字列で置換することができません。
強いて「A.」から「A-」に置換できても、精度が低く必要のない内容も置き換えてしまうリスクがあります。
そこで、正規表現というルールを言語化するツールを使うと、便利に効率よく解決することができます。今回はそんな正規表現を簡単にご紹介します。
上記のような、数字、アルファベット、記号で組み合わせる文字列を正規表現といいます。
一見魔法の呪文のようにも感じますが、一定のルールに基づいて書いています。
そのような呪文を使うと、完全一致しなくても、ルールにさえ合っていれば、すべて検索し出すことが可能です。
それでは、実際の課題を解決しながら、正規表現の構成を見ていきましょう。
300,000円
30円
↓
¥300,000
¥30
検索:
1 2 |
// 言語化: 円の前に数字もしくはカンマが続く文字列を抽出する ([\d,]+)円 |
TIP: 正規表現を使って検索する際は、エディターで正規表現を有効にする必要があります。
例えば、Visual Studio Codeの場合、「.*」マークにチェックを付けると、有効になります。
置換:
1 2 |
// 言語化: 円マークの後ろに検索した数字もしくはカンマが続く文字列を追記する ¥$1 |
さて、謎の文字列はそれぞれ何を意味しているでしょうか。
[]
の中は、一つの文字列として認識されます。
\d
というのは数字を意味します。大文字の \D
に変更すると、数字以外の文字列を抽出することができます。
+
は前の文字列であれば、無限に続くという意味です。
()
の中にある文字列では、置換欄で、$1
、$2
などで指定することができます。$の後ろにある数字は括弧の個数目です。
ちなみに、,300,200円
のように、1つ目の文字がカンマの結果も置換されることを防ぎたい場合、下記のように最初の一文字目が数字の結果だけを抽出することができます。
1 2 |
// 言語化: 円の前に数字もしくはカンマが続き、1文字目が数字の文字列を抽出する (\d[\d,]+)円 |
もう一つの例を見てみましょう。
第1章:正規表現の基本
第2章:正規表現のパターン
↓
1章. 正規表現の基本
2章. 正規表現のパターン
上記のような、連番の形式を変更したい場合も、下記のような正規表現で解決できます。
検索:
1 2 |
// 言語化: 単体または続く数字と「章」の組み合わせ、「:」の後ろに最後が「。」マークではない任意の文字列をそれぞれ抽出する ^第(\d+章):(.*[^。])$ |
置換:
1 2 |
// 言語化: 抽出した文字列を「.」で連結する $1. $2 |
上記の例で登場した新しい指定方法を1つずつ見てみましょう。
頭にある^
記号は、行の最初を意味します。逆に一番最後にある$
記号は、行の最後を意味します。
[]
括弧の中にある^
記号は、反転を意味し、[]
にあるパターン以外を抽出できます。
まとめると、正規表現を使って置換する場合は、まず置換したい内容はどのようなルールがあるかを分析し、それを言語化します。
そして言語化した内容を正規表現に書き換えます。
当たり前のことですが、置換前は一通りチェックする必要があります。
パッと見、全部マッチできたとしても、実際は漏れている箇所があるかもしれないので、慎重に確認しましょう!(数を合わせましょう)
ちなみに、自分はできていなかったので、色々迷惑をかけてしまったことがありました。(泣)
正規表現では使う括弧によって、使い道が全く異なります。
簡単な例でいうと、(じゃ)+
の場合、「じゃ」が続く文字列を検索します。
[じゃ]+
になると「じ」もしくは小さい「ゃ」が続く文字列を全部検索することができます。
{}
波括弧は、{1,5}
のように文字列の桁数の上限・下限を設定する役割があります。
また、括弧の開始と終了の場所も、検索結果を大きく左右する場合があります。
そのため、自分が作った呪文がうまく稼働しない場合は、まず括弧を確認しましょう。
スラッシュは、\
と/
のうち、どちらでしょうか?
単体で出すと一層迷ってしまうでしょう。
そんな時はWebサイトのURLを一度”カンニング”してみましょう!
/
がスラッシュ、そして逆バージョンの\
がバックスラッシュです。
正規表現では、$
、^
など定められた記号をそのまま文字列として一致させたい場合、前にバックスラッシュを付ける必要があります。
つまづいたときは、\
と/
を正しく使っているか、一度確認しましょう。
正規表現の歴史は、1950年代まで遡ることができます。
数字、アルファベット、記号などをロジック的に並び替え、一定のルールに基づく文字列を取り出すことができます。
あらゆるプログラミング言語で使うことが可能なので、一括置換だけではなく、プログラム処理を書く際にも重宝できるツールです。
みなさんもぜひオリジナルの呪文を作ってみて、作業効率を倍にアップしていきましょう!