D日記

モーションアーティストの技術ブログだよ。日常も書くよ。

MENU

【テキスト】正規表現とSublimeTextで大量の文字列を一気に処理!

f:id:ponta565:20191005135801p:plain

正規表現ってめっちゃ便利なんですよ!!

私は subimeText を使っているのですけど、
こいつと正規表現の組み合わせは無敵だと思っています。

シチュエーション

例えば、Mayaで作ったモーションファイルを、アスキー形式のモーションデータとして書き出したとします。

すると下記のような文字列が1万行くらい入ったアスキーデータが出来上がるわけですよ(^^)

|Rig_Spine|Rig_Neck|Rig_Head.tx
|Rig_L_Arm|Rig_L_ForeArm|Rig_L_Hand.rx



不幸なことに、例えばプロジェクトの方針が変わって、キャラにネームスペースをつけることになり、昔吐き出したモーションデータを流し込めなくなるという状況が発生したとします。
 → ノード名が変わってしまうからです。


ネームスペースが入るとこんな感じのノード名に変わります。
(「Chara001:」という文字列が、ノード名の先頭に追加されます)

|Rig_Spine|Rig_Neck|Rig_Head.tx
↓↓↓↓↓↓
|Chara001:Rig_Spine|Chara001:Rig_Neck|Chara001:Rig_Head.tx



さぁどうしましょう?
ノード名の前にネームスペースの文字列を1つづつ追記していきますか?
いやいや、それはもう膨大な時間がかかってしまいます。
1からモーション作り直したほうが早いかもしれません(#^ω^)


特定の文字列を検索して置き換えるのもできません、ノード名はバラバラだからです。


そんな時に役に立つのが 正規表現 !!!


では実際にやってみましょう。

「|」と「Rig****」の間に文字を挿入する

下記文字列の「|」とその右側にある「半角英数字」または「_」を取得するには・・・

|Rig_Spine|Rig_Neck|Rig_Head.tx



このような文字列パターンで検索をかけます。

\|([a-z]|_|\d)*



Ctrl + F で検索入力ボックスを開き、画面左下のアスタリスクアイコンをオンにすると正規表現がアクティブになります。
f:id:ponta565:20180810231537g:plain


■ SublimeTextで使用しているショートカット

Alt + Enter :
検索に引っかかた文字をすべて選択状態にする

Ctrl + (← or →) :
文字列または英単語の先頭/末尾へ移動



はい!ノード名を判定して単語頭に「Chara001:」を追加することができました!
全てのノード名に対してです!!
すごいでしょ!
f:id:ponta565:20180811145553p:plain ↓ ↓ ↓ f:id:ponta565:20180811145440p:plain

解説

今回の正規表現を少し解説します。
f:id:ponta565:20180811220640p:plain

①「|」を文字列として認識してもらうために「\」を前に付けました。
分かりづらい説明ですが、詳しくはエスケープシーケンスでググると分かります。
②a~z までの英単語1文字。
③そのまま「_」という意味。
④半角数字(0-9)の1文字。
⑤前の文字のいずれかを0回以上繰り返す意味。
⑥ ②③④のいずれか一つを選ぶため記述。メタキャラクターと呼ぶ。
「()」で囲まれている範囲内にあるパターンを「|」で分割し、その中のいずれか一つが選ばれる。
ここが今回の一番大事なところですね。


上記より検索文字列を全体的に説明すると・・・

「|」の後ろに、「a~z の1文字」 または 「_」 または 「半角数字(0~9)1文字」
が 0回以上繰り返している文字列

という意味になります(o・ω・o)
それがこのような文字列になるのですね。

|Rig_Spine




正規表現のリファレンスについては下記サイトがよく纏まっております!
私のうんこみたいなサイトより断然見やすいのでご参照下さい!
qiita.com

行頭・行末の文字をいじる

たとえば、下記のような文字列から、
行頭・行末のみにある、「"」を削除するとします。

"C:\Program Files\Autodesk\Maya2018\bin\maya.exe"
print "こんち";
print "あああ";



普通に、「"」で検索して削除すると、 「 print "こんち"; 」 の 「"」も削除されてしまいます。 こんな感じです↓

C:\Program Files\Autodesk\Maya2018\bin\maya.exe
print こんち;
print あああ;



以下の正規表現で検索して、Alt+Enterで削除すると・・

^"|"$

f:id:ponta565:20180810231856g:plain

こんな感じで、行頭・行末の「”」だけを削除することができました(o・ω・o)

C:\Program Files\Autodesk\Maya2018\bin\maya.exe
print "こんち";
print "あああ";




プログラマーだけでなく、文字列を扱う仕事では正規表現が役立つことが色々あります!
みなさんも是非触ってみて下さい(o・ω・o)