データ抽出ページ

はじめに

Linux等のOSではgrepというコマンドがあって、このコマンドを使うとファイルの中から特定の文字が含まれる行の一覧を抽出してくれます。

これがWebブラウザでできたらもっとお手軽に使えるのにと思って作ったのがデータ抽出ページです。grepコマンドと同様に、特定の文字が含まれる行を簡単に抽出できます。

それ以外にも、正規表現に一致した文字列の一覧や、特定の文字を置換した結果を出力することもできて、ちょっとしたテキスト処理が簡単にできるようになっています。

なお、テキスト処理には正規表現を利用しております。正規表現について詳しく知りたい方は手を動かしながら覚える正規表現をご覧ください。

基本的な使い方

画面上部のテキスト入力欄に処理したいテキストを入力して、抽出文字列欄で抽出内容を指定します。すると結果が画面下部のテキスト入力欄に出力されます。

結果の出力はキーを入力するたびにリアルタイムに行いますので、結果を見ながらいろいろ試してみることができます。

何種類かの機能がありますが、それぞれの機能については以下で説明します。

行抽出

grepですね。抽出文字列で指定した文字列が含まれる行を抽出します。例を見てみましょう。

合資会社日本○○○
株式会社○○組
合同会社○○製作所
○○商事株式会社

この会社一覧から「株式会社」を抽出したいと思います。抽出文字列に「株式会社」と入力してみてください。次のように株式会社が含まれる行だけ抽出されます。

株式会社○○組
○○商事株式会社

抽出文字列は正規表現で指定しますので、株式会社で始まる文字列だけを抽出することもできます。抽出文字列に「^株式会社」と入力してみてください。次のように株式会社で始まる行だけ抽出されます。

株式会社○○組

このように、指定した文字列が含まれる行を抽出するときには「行抽出」を使ってください。

一致箇所抽出

指定した文字列に一致した箇所を抽出します。こう書くとそのままなのですけど、そのままの機能です。

# 円の面積を求める
use strict;
use warnings;

my $pi = 3.14; # 円周率
my $r = 10; # 半径

# 円の面積=円周率×半径×半径
print $pi * $r * $r, "\n";

このようなデータに対して抽出文字列に「#」を指定すると次のようになります。

#
#
#
#

一致した数だけ「#」が表示されました。これだけではあまり嬉しくないですね。正規表現が使えるのが嬉しいところですので次のように正規表現を利用して抽出文字列を指定してみます。抽出文字列に「#.+」を指定。

# 円の面積を求める
# 円周率
# 半径
# 円の面積=円周率×半径×半径

このように「#」で始まる文字列の一覧を抽出することができました。

正規表現の練習にも使えますね。

行抽出の時には処理単位は「行」しか選べませんでしたが、一致箇所抽出では「文字列」が選べるようになります。行と文字列の違いについて説明します。

まずは例を見てみましょう。入力データはこんなの。

<!-- コメントです -->
ここは本文
<!--
  ここもコメントですね
-->

抽出文字列は「<!--[^s^S]*?-->」とします。

処理単位「行」の場合の結果はこうなります。

<!-- コメントです -->

処理単位「文字列」の場合の結果はこうなります。

<!-- コメントです -->
<!--
  ここもコメントですね
-->

処理単位「行」の場合は一行ずつ処理を行うため、複数行にまたがる文字列には一致しません。処理単位「文字列」にすると全体をひとまとめにして処理を行うので、複数行にまたがる文字列も一致するようになります。

キャプチャ抽出

一致箇所抽出で抽出したものからさらに一部を抽出したいときに使います。早速具体例をみてみましょう。

<input type="text" id="addr" />
<input type="submit" id="next" value="next" />

ここからid要素の値を抽出することを考えます。

id要素にマッチする正規表現はたとえば「id=".*?"」のようになります。これを一致箇所抽出で指定すると次のような結果になります。

id="addr"
id="next"

マッチした箇所すべてが抽出されるので余計な部分も混ざっています。こんな時にキャプチャ抽出を使います。正規表現は「id="(.*?)"」というように抽出したい部分を括弧で囲んでください。括弧で囲んだ部分だけを抽出します。

addr
next

置換抽出

抽出文字列で指定した文字列を置換文字列に置き換えます。まずは簡単な例から。

ここで履物を脱いでください。
一つ下さい。
やめてください。

「ください」と「下さい」が混在していますが、これを「下さい」に統一したいと思います。この場合は抽出文字列に「ください」、置換文字列に「下さい」を指定します。結果は次のようになります。

ここで履物を脱いで下さい。
一つ下さい。
やめて下さい

置換だけではなくて文字列を追加する時にも使えます。たとえばメールの引用文を作りたいときには各行の先頭に「>」を追加しますが、置換抽出の機能でこれができます。

日 時:2008年10月10日 10:00~12:00
場 所:A-3会議室
参加者:プロジェクトメンバー、担当営業

こんな文章があったときに抽出文字列に「^」、置換文字列に「>」を指定します。結果は次のようになります。

>日 時:2008年10月10日 10:00~12:00
>場 所:A-3会議室
>参加者:プロジェクトメンバー、担当営業

さらにはキャプチャを使った置換もサポートしています。これも例で説明します。「YYYYMMDD」形式の日付データがあったときに「YYYY-MM-DD」形式に置換してみます。

20081010
20100101

抽出文字列に「(\d{4})(\d{2})(\d{2})」、置換文字列に「$1-$2-$3」を指定します。結果は次のようになります。

2008-10-10
2010-01-01

その他詳しくは手を動かしながら覚える正規表現<置換処理編>をご覧下さい。

終わりに

ここで紹介した文字列処理は各種コマンドを組み合わせたりテキストエディタの機能を利用することでも実現できますが、ちょっとした処理であればブラウザ上で実行してしまうというのもお手軽で良いと思います。

使い方でわからないところがあれば、掲示板メールで質問していただければ、わかる範囲でお答えしたいと思いますのでお気軽にどうぞ。