正規表現

【正規表現】置換前の文字列を一部残しつつ置換する

こんばんは。水戸スヤです。

今日は文字列操作の小技を。
文字列を置換する際に、正規表現を使用すると便利ですよね。

今回はただ置換するだけでなく、
「置換前の文字列を一部残しつつ置換する」
という方法を備忘録として残します。

下記のようなデータ構造の製品在庫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」となります。

おしまい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です