元の文字列を残したまま置換する方法
投稿 2023年10月28日
最終更新 2023年10月28日
専門用語少なめ
元の文字を保持したまま置換したい
正規表現を使用して検索すると、任意を文字列をヒットされることができますが、
置換をすると、ヒットする文字列がすべて置換後の文字列になります。
置換前の文字を残したまま置換をしたいと。
例えば…
- 特定の箇所をダブルクォーテーションで囲みたい
- 特定の箇所の区切り文字を変えたい
というのを例に紹介します。
やりたいこと
- 2つ目をダブルクォーテーションで囲む
- 3つ目の文字と数字の間にアンスコを入れる
置換前
1,test_123,example1,321
2,example_1,test123,123
3,sample_12,sample1,999
置換後
1,"test_123",example_1,321
2,"example_1",test_123,123
3,"sample_12",sample_1,999
正規表現
置換前
([a-z]+_[0-9]+),([a-z]+)([0-9]+)
置換後
"$1",$2_$3
正規表現の解説
どういう仕組みで置換されているかというと、
みそなのは「$1」です。
置換前にある()の中身が$1に代入されています。
左側から()を数えて、1つ目は$1、2つ目は$2…
と順番に代入されています。
色付け
紐づけがわかりやすいように、色付けすると以下のようになります
置換前
([a-z]+_[0-9]+),([a-z]+)([0-9]+)
1,test_123,example1,321
2,example_1,test123,123
3,sample_12,sample1,999
置換後
"$1",$2_$3
1,"test_123",example_1,321
2,"example_1",test_123,123
3,"sample_12",sample_1,999
便利な使い方
個人的に使っている便利な使い方を紹介しておきます。
順番を変える
置換前
(.+),(.+),(.+),(.+)
1,test_123,example1,321
2,example_1,test123,123
3,sample_12,sample1,999
置換後
$2,$1,$4,$3
test_123,1,321,example1
example_1,2,123,test123
sample_12,3,999,sample1
複製
置換前
(.+),(.+),(.+),(.+)
1,test_123,example1,321
2,example_1,test123,123
3,sample_12,sample1,999
置換後
$1,$2,$3,$4,$1
1,test_123,example1,321,1
2,example_1,test123,123,2
3,sample_12,sample1,999,3
間に代入
置換前
(.+,.+),(.+,.+)
1,test_123,example1,321
2,example_1,test123,123
3,sample_12,sample1,999
置換後
$1,NULL,$2
1,test_123,NULL,example1,321
2,example_1,NULL,test123,123
3,sample_12,NULL,sample1,999
まとめ
最初知ったときは衝撃が走りました。
これを知ってからというもの、作業が超効率化できました。
さらに、正規表現を調べるきっかけになって、正規表現が怖くなくなりました。
正規表現検索ができて、置換機能があるツールなら大体できると思うので、
是非活用してみてください。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。