テキスト抽出 正規表現 GREP?について質問です。


東京都/千代田区/千代田/1-1-1
東京都/中央区/日本橋/1-1-2
東京都/中野区/中央/1-1-3
東京都/渋谷区/神宮前/1-1-4

このようなテキストが並ぶファイルがあるとします。
これの「区」の箇所だけを自動的に抽出したいのです。
以上のテキストが、以下のようになるイメージです。

千代田区
中央区
中野区
渋谷区


「テキスト抽出ソフト」「正規表現」「GREP」というものを使えばできるのかもと考えております。

まず、
1.「東京都/」を消す
2.残ったテキストのうち、「/」の前までを残して後は消去
(ただし改行コードは残す)

これでできると思いますが、実際にどのソフトを使って、どういった正規表現を指定すればいいのかがわかりません。

どなたかよろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/03/09 17:20:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:eggplantbb No.1

回答回数45ベストアンサー獲得回数2

ポイント20pt

正規表現に対応したテキストエディタで

1.「東京都/」を「」に置換する(=消す)

2.「区/.*$」を「区」に置換する

という作業をすれば実現できるかと思います。

id:tokyosmash

ありがとうございます!

正規表現って便利ですね。

色々と勉強してみようと思います。

2007/03/02 17:50:23
id:bigorange No.2

回答回数46ベストアンサー獲得回数1

ポイント20pt

GREPってのはプログラム言語の関数名のことでしょうか?(UNIXのコマンド?)


tokyosmashの知識がどの程度かわからないのでとりあえず簡単な方法を

1:Microsoft Excelでファイルから開く

2:ファイルを開くウィンドウの下にファイルの種類があるのですべてのファイルにする

3:テキストファイルを選択できるようになる(一覧に出てくる)ので選択

4:テキストファイルウィザードってのが出てくるので"元のデータ形式"をカンマやタブなどの区切り文字によってフィールドごとに区切られたデータにチェック(多分最初からなってる)

5:次へ

6:区切り文字のその他にチェックして右にあるボックスに/を入力

完了すると元のファイルが/でセルごとに区切られてるので~区の列だけ選択してコピーするなりご自由に。


自動的ってのは全部自動ですかね?だったらごめんなさい。

id:tokyosmash

いやーこの方法は思いつきませんでした。

/を区切りに使えばいいのですね。

素晴らしい。

本当にありがとうございます。

この方法だと色々と応用が利きます!

2007/03/02 17:51:52
id:kn1967 No.3

回答回数2915ベストアンサー獲得回数301

ポイント20pt

GREPは行を表示するだけなので、部分的に抽出したいのであればPERLなどのテキスト処理スクリプトで行う必要がありますので、敷居は少し高くなりますよ。

Excelを使うなどはダメですか?

  A列に住所が並んでいるとして、

  B1に =MID(A1,5,SEARCH("/",A1,5)-5)

  B2以下はB1をコピー

でお望みの一覧が出来ますけど、、、

id:tokyosmash

なるほどこれでも出来ますね。

神奈川県や和歌山県の場合は微調整すれば。

GREPだと行を抽出するだけなので困っていたのです。ありがとうございます。

2007/03/02 17:54:16
id:kurukuru-neko No.4

回答回数1844ベストアンサー獲得回数155

ポイント20pt

Windowsでの作業として

1.

Excelでそのファイルを"/"を区切り文字として読み込めば

あとは切り貼り

2. gawkを使う

http://www.vector.co.jp/soft/win95/util/se376460.html

http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/GNU/AWK/jgawk-jman/ht...

入力ファイルをaddr.txtで漢字がシフト

JISの場合

以下をファイルに保存する ku.awk

#
# BEGINは処理開始時に処理される
#
BEGIN {
 # 区切り文字を設定する。
 FS="/";
}

#
# 1行単位に処理される
#
# データ個数が N以上で N番目の文字が区で終わる文字を保存する
#
# NF: 区切り文字で区切ったときの項目数
# node: 区の住所の個数を数えて保存する 
#
{

        if( NF>=2 && match($2,".*区$") > 0 ) {
    node[$1","$2]++; 
 } else if( NF>=3 && match($3,".*区$") > 0 ) {
    node[$1","$2","$3]++; 
 } else if( NF>=4 && match($4,".*区$") > 0 ) {
    node[$1","$2","$3","$4]++; 
 };
}

#
# ENDは処理終了時に処理される
# データを抽出したものを表示する。
#

END {
  for( dat in node ) {
    printf("%s,%d\n",dat,node[dat]);
  }
}

保存したファイル ku.awkとgawkをつって抽出する

したものをソートして ku.csvに保存する

gawk -f ku.awk addr.txt |sort > ku.csv

ku.csvは、住所の区単位に件数を数えたデータ

なのでExcel等で読み込み加工する。

id:j_kimi No.5

回答回数32ベストアンサー獲得回数4

ポイント20pt

こんな感じ?

http://td200wr.zapto.org/html/work/test07.cgi

貼り付けて変換押してください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません