LoginSignup
4
7

More than 5 years have passed since last update.

【スクリプト&エクセル不使用】markdown形式の表をcsvから簡単に作る方法【正規表現】

Posted at

csvやエクセルの表をmarkdownの表形式に変換する方法を紹介します。
スクリプトを組んだりエクセルを使う方法もありますが、今回は正規表現を使った置換でやります。

※急いでる人は結論を読んでください
※何故かatomで肯定戻り読みが使えないので、sakura editorでしか検証できていません。

やること

このcsvを
A,B,C
D,E,F
G,H,I
J,K,L

2回の置換でこんな感じに変形しちゃいます
|A|B|C|
|:-:|:-:|:-:|
|D|E|F|
|G|H|I|
|J|K|L|

step0:正規表現が使えるエディタに変換前のcsv等をコピペ

Excelの表はエディタに貼り付けるとtsv(タブ文字区切り)になっています。
以降csv前提で書いているので、カンマ区切りを置換している部分は,\tに読み替えてください。

step1:正規表現の置換で2行目の左右寄せ「:-:」を除く部分の表を作ります

※tsvでやってる人は早速置換前の,\tに読み替えてください

2行目以外の変換
//置換前
^|$|,

//置換後
|
結果

|A|B|C|
|D|E|F|
|G|H|I|
|J|K|L|

step2.正規表現の置換で2行目の作成を行います

markdownの表には、各列の(左寄せ|真ん中寄せ|右寄せ)を表現する2行目が不可欠です。
こちらは1行目をコピペして余分に作成したものを正規表現で置換してを2行目として作成します。

一行目を増やす

|A|B|C|
|A|B|C|
|D|E|F|
|G|H|I|
|J|K|L|

上記のように一行目をコピペで増やした後、
2行目に対して以下の正規表現を実行してください。

ヘッダの変換
//置換前
(?<=¥|).+?(?=¥|)

//置換後(前列真ん中寄せで良い場合)
:-:

正規表現でやってることとしては、|と|に挟まれている文字列を:-:に変換しています。

結果
|A|B|C|
|:-:|:-:|:-:|
|D|E|F|
|G|H|I|
|J|K|L|

Markdown形式の表に変換できました。
ちゃんとレンダリングできますよ。

A B C
D E F
G H I
J K L

あとは必要な箇所の右寄せ・左寄せを調整してください。

最後に - Markdownの表形式に思うこと

ヘッダとデータの間に入る2行目のせいで変換に手間がかかりました。

|A|B|C|
|:-:|:-:|:-:| ←これ
|D|E|F|
|G|H|I|
|J|K|L|

再利用性とか効率性を重視するなら2行目なしでも表として扱えるようにしてほしいです。

ですがWikipediaには

書きやすくて読みやすいプレーンテキストとして記述した文書を、妥当なXHTML(もしくはHTML)文書へと変換できるフォーマット

とあります

「プレーンテキストでも読みやすい」コンセプトを重視するなら

列を揃えた結果
|A  |B  |C  |
|:-:|:-:|:-:|
|D  |E  |F  |
|G  |H  |I  |
|J  |K  |L  |

ここまで整形すべきです。また2行目があることでプレーンテキストでも読みやすくなっています。
手間ですがリーダブルコードの縦を揃えるに通じるところがあります。個人的には好きです

文字数をあわせて列を揃えるのは正規表現では解決できません(多分)。
これはスクリプトを作る必要があります。

テキストエリアにペタッと貼ってボタンを押したら、きれいな表形式が出来るサイトなんかがあれば最高だと思います。

なんとそんなサイトがありました

結論:このサイトを使いましょう

前述した読みやすさも実現してくれます。すごい。

変換前コピペ用
A,B,C
D,E,F
G,H,I
J,K,L
上のサイトでの変換結果
| A | B | C | 
|---|---|---| 
| D | E | F | 
| G | H | I | 
| J | K | L | 

4
7
0

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
4
7