ぼちぼちあしあと

プログラム初心者の備忘録です。

正規表現を使って検索&置換

こんにちは。

ずいぶんご無沙汰しました。

就活がようやく落ち着きました。

結論としては、京都のIT企業で働くことになりました。

全くもってIT初心者なので、この業界で自信は全くありませんが笑、神様が与えてくださったところで神様から必要なものを受け取りつつ、一歩ずつ歩んでいきたいと思います。

正直、就活を始めた頃は全く考えていなかった進路なので、自分でもびっくりです。

最近はpaizaのスキルチェックをちょこちょここなしています。

そっちの話も書きたいのですが、気を遣わないといけないことがたくさんあるので、とりあえず保留中です。

今日はpaizaとは全く関係なく、研究で役に立った話を書こうと思います.

以下のようなデータファイルがあるとします。

A  2.512335  15.542363
B  13.380765  3.453634
C  5.965134  9.663451
D  12.469098  10.687621
(以下略)

このデータファイルの構造としては、アルファベット、半角スペース2つ、データ(小数第6位まで)、半角スペース2つ、データ(小数第6位まで)となっているようです。

このままだと小数点の位置が行によってガタガタしてしまうので、以下のように

A   2.512335  15.542363
B  13.380765   3.453634
C   5.965134   9.663451
D  12.469098  10.687621
(以下略)

のように揃えたくなったとします。

元データの方をよく観察すると、整数部分が1桁のものと2桁のものがあり、1桁の数値の小数点が相対的に左にずれてしまっているようです。

もちろん、ぽちぽちスペースを入れていっても揃えられますが・・・。

そんなときは検索と置換を使わないとやってらんないでしょう。

テキストエディタとしてAtom(あまり使わない)やVScode(よく使う)などがありますが、研究関連ではJedit Ωにお世話になっているので、今回はJedit Ωの検索&置換(正規表現)を用いることにします。

結論としては、以下のようにすればできます。

検索欄( \d.)

※(と\の間に半角スペースが入っていることに注意

置換欄 \1

※\の前に半角スペースが入っていることに注意

ポイントがいくつかあって、

①()で囲った文字列はグループにすることができる。

②\dで任意の(一桁の)数字を表す。[0-9]と同じ。

正規表現において.は任意の一文字を表すので、\でエスケープする。

④置換欄に\1から\9のいずれかを書いた場合、検索で一致したグループ化した文字列の1番目から9番目の文字列と置換される。

Jedit Ωではスペースを表す正規表現は\x20などではなく、スペースそのものである。(なんでやねん)

今回、とりわけ④については勉強になりました。

今日も一つ勉強になりました。

補遺

Jedit Ωは結晶構造とかを可視化するVESTAというソフトと連動させることができるという嬉しい特典がある。(とはいえ実はあんまり連動させたことはない。)

サクサク動くし、デフォルトで矩形選択もできるし、普通にいいエディタだとは思う。