こんばんは。水戸スヤです。
今日は文字列操作の小技を。
文字列を置換する際に、正規表現を使用すると便利ですよね。
今回はただ置換するだけでなく、
「置換前の文字列を一部残しつつ置換する」
という方法を備忘録として残します。
下記のようなデータ構造の製品在庫CSVがあったとしましょう。
No | 画面サイズ | 製品名 | 在庫数 |
---|---|---|---|
1 | 22 | Waoo-v22 | 10 |
2 | 32 | Waoo-v32 | 20 |
3 | 40 | Waoo-v40 | 5 |
4 | 100 | Waoo-v100 | 0 |
実際のデータ
No,画面サイズ,製品名,在庫数 1,22,Waoo-v22,10 2,32,Waoo-v32,20 3,40,Waoo-v40,5 4,100,Waoo-v100,0
この全製品の製品名の末尾に「【発注済】」を付加したいとします。
置換前に「[0-9]+」として製品名の数値部分を抽出しようとすれば、画面サイズも抽出されてしまいます。
かといって置換前に「Waoo-v[0-9]+」とすると、製品名すべてが置換されてしまいます。
さっそく回答を書くと、
正規表現を有効にして、
置換前:(Waoo-v[0-9]+)
置換後:$1【発注済】
とするとどうでしょう?
「Waoo-v[0-9]+」の部分はそのままに、「【発注済】」を付加できました。
解説すると、
置換前の()は()内は置換しないことを意味しており、
「Waoo-v」と連続する数値部分はそのままにするという記述です。
置換後の$1は、置換前の()を参照しています。
ちなみに、置換前の()を2個、3個と増やすと、置換後は$2, $3とすることで対応できます。
肝は 「()」 と 「$1」 です。
なおこの方法は、Visual Studioとサクラエディタで確認済みです。
秀丸エディタの場合は「$1」でなく「\1」となります。
プログラマがよく使う正規表現は下記のページにまとめました。
おしまい。
めっちゃ助かりました。ありがとうございます。