LoginSignup
3
2

More than 5 years have passed since last update.

Where in の条件部分を正規表現でうまいことしよう

Last updated at Posted at 2017-09-07

概要

システムの保守やってるとwhere in のクエリをよく使います。
エクセルの表が添付されて、こいつらを消せとか調査しろみたいな指令が来たとき

ABCD1577
ABCD1618
ABCD1631

みたいなのを

'ABCD1577',
'ABCD1618',
'ABCD1631'

にしたいとか

XXXXABC37540M          R52M
XXXXABC37541M          R53M
XXXXABC37542M          R54M

みたいなの(エクセルから2列コピってくるとtabに挟まれてますね)を

('XXXXABC37540M','R52M'),
('XXXXABC37541M','R53M'),
('XXXXABC37542M','R54M')

にしたいときがあります。
正規表現使ってやってみましょう。

サクラエディタで

だいたいの現場で標準に使われてるサクラエディタでのやり方はこちら。
サクラの正規表現エンジンの所以か、行末を$で指定すると改行まで引っかかってうまくないです。なんでじゃろうな。
苦肉で改行コードを置換前後に入れてたりします。
もうちょっといいやり方があるんでなかろうか…

1項目

  • 置換前
^(.*)\r
  • 置換後
'\1',\r

2項目

  • 置換前
^(.*)\t(.*)\r
  • 置換後
('\1','\2'),\r

Vimで

Vimの正規表現での書き方はこちら。

1項目

:%s/^\(.*\)$/'\1',/g

2項目

:%s/^\(.*\)\t\(.*\)$/('\1','\2'),/g

VeryMagic使った方が良さげですね。

割とよく使うので私はvimrcに書いてキーバインドを割り当てています。
VisualModeで選択して使うので、%は抜いています。

vnoremap <Leader>k :s/^\(.*\)$/'\1',/g<CR>
vnoremap <Leader>K :s/^\(.*\)\t\(.*\)$/('\1','\2'),/g<CR>

置換結果の最後の1行はカンマ削ってね。

3
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2