特定文字列の抽出

[2484]特定文字列の抽出 | 投稿者:ヒロ | 投稿日:2009/02/27(Fri) 10:21:29
場違いな質問かもしれませんが、
『バニラアイス50』というような
『』で囲まれた文字列をすべて、『』を含めて抽出して
『バニラアイス50』(改行)
『チョコアイス60』(改行)
(以下同様)
となった
テキストファイルにしたいのですが、インデザインCS3で出来ますでしょうか?
たぶん、正規表現、perlというものを使うかと思いますが。
インデザイン上でなくてもインデザインからテキスト保存して
テキストエディタ等での処理でもかまいません。
フリーであれば有り難いですが、
一発抽出でテキストファイル保存できれば、有料の物でもかまいません。
大量にありますので、検索コピペは大変です。
よろしくお願いします。
» 1
[2485]Re: 特定文字列の抽出 | 投稿者:せうぞー | 投稿日:2009/02/27(Fri) 11:08:32
InDesign上でJavaScriptでもできると思いますが、
テキスト上でやるならこんな感じだと思います。

#! /usr/bin/ruby -Ku
while line = ARGF.gets
   line.scan(/『.*?』/) {|m|
       puts m
   }
end
» 2
[2486]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 11:11:11
こんにちは。
私ならテキスト書き出ししておいてRubyかな。

line.gsub!(/.*?(『.*?』)/) {"#{$1}"}
line.sub!(/^([^『』]+$)/) {""}

一応これでできるけど、なんかスマートじゃないかも。
--------------------------------------------------
以下追記
私、入力するの遅かったようですね。
せうぞーさんの方がスマートです(現実でもw)
» 3
[2487]Re: 特定文字列の抽出 | 投稿者:ヒロ | 投稿日:2009/02/27(Fri) 11:27:51
せうぞー様、いき様
早々にありがとうございます。

正規表現、perlと書いたものの全く無知でして

#! /usr/bin/ruby -Ku
while line = ARGF.gets
line.scan(/『.*?』/) {|m|
puts m
}
end



line.gsub!(/.*?(『.*?』)/) {"#{$1}"}
line.sub!(/^([^『』]+$)/) {""}

はどのように使用したら良いのでしょうか?
よろしくお願いします。
» 4
[2488]Re: 特定文字列の抽出 | 投稿者:せうぞー | 投稿日:2009/02/27(Fri) 11:36:57
rubyはインストールされていますか?
ターミナル(winだとDos窓って言うんでしたっけ?)から
$ruby スクリプトファイル 対象ファイル >書き出しファイル
です。
日本語クリーンなshellなら、ワンライナーで
$ ruby -ne 'puts $_.scan(/『.*?』/)' hoge.txt >fuga.txt
なんてしてもかまいません。

>>いきさん。
>現実でもw
現実は、そうでもないんですよ^^
» 5
[2489]Re: 特定文字列の抽出 | 投稿者:ヒロ | 投稿日:2009/02/27(Fri) 11:54:34
何度もすいません。
rubyは、
http://www.ruby-lang.org/ja/downloads/
ここからダウンロード出来るものですか?

>winだとDos窓
コマンドプロンプトでしょうか?
» 6
[2490]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 12:05:36
ヒロさん、そうです。
そのページにインストールガイドもありますので、後はそちらをご参照ください。

>>winだとDos窓
>コマンドプロンプトでしょうか?
ええ、昔のWindowsではDos窓と言ってました^^
» 7
[2492]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 12:18:53
少しだけ情報追加しときますね。
※ここはRubyそのもののサポートをする場所ではありませんので、なるべくご自身でがんばってくださいね。

おすすめはひとつ前の安定版、Ver.1.8.7です。
あと、せうぞーさんのレスにあったスクリプトも、私のスクリプトもどきも、いずれもRubyです。Perlではありません。
私の「もどき」は省略して書いてあるので、全文を書いておきますね。

#!C:/Program Files/Activeruby-1.8/bin/ruby -Ku
while line = ARGF.gets
line.gsub!(/.*?(『.*?』)/) {"#{$1}"}
line.sub!(/^([^『』]+$)/) {""}
print line
end


1行目は、Rubyをインストールしたパスでして、行末の
-Ku
は文字コードにunicodeを指定しています。
» 8
[2493]Re: 特定文字列の抽出 | 投稿者:たけうちとおる | 投稿日:2009/02/27(Fri) 13:21:24
すんごいべたなやりかたですが
一旦全部改行をとってしまって

InDesignのGREPで『』以外の部分
すなわち』から『までを改行に置き換えるというのはいかがでしょう?

検索文字列:』.*?『

置換文字列:』『
» 9
[2494]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 13:29:41
たけうちとおるさん>>
こちらでははじめまして。

えーと、そのやり方もいいんですが、
・行中の『よりも前
・行中の』よりも後
・『』の出てこない行
を削除してやる必要がありますので1発というわけにはいきませんね。
» 10
[2495]Re: 特定文字列の抽出 | 投稿者:せうぞー | 投稿日:2009/02/27(Fri) 13:38:57
(?s)』.*?『
単一行モードなら、僅かにストーリーの最初と最後を手作業が入るくらいです。
まあ、それ以上を考えるならスクリプトを組むですね。
» 11
[2496]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 14:02:35
> (?s)』.*?『
すげ。
勉強になりましたm(_ _)m
※毎度のことですがw
» 12
[2497]Re: 特定文字列の抽出 | 投稿者:ヒロ | 投稿日:2009/02/27(Fri) 14:20:54
せうぞー様、いき様、たけうちとおる様
ありがとうございます。
まず、Rubyをインストールしてがんばってみたいと思います。
それから、
>InDesignのGREPで・・・
>(?s)』.*?『
も試してみたいと思います。
本当にありがとうございました。
また、お聞きすることがあると思いますがよろしくお願いします。
» 13
[2498]Re: 特定文字列の抽出 | 投稿者:たけうちとおる | 投稿日:2009/02/27(Fri) 14:46:17
いきさん
はじめまして。いつもROMですいません。
>・『』の出てこない行
>を削除してやる必要がありますので1発というわけにはいきませんね。
最初に一旦全部改行をとってしまう部分があるので『』の出てこない行は消えてくれると思います。
でも2発ですね。

せうぞーさん
> (?s)』.*?『
あー。それが書きたかったのですが、 (?s)使った事なくて検証できませんでした。。。
» 14
[2499]Re: 特定文字列の抽出 | 投稿者:いき | 投稿日:2009/02/27(Fri) 14:56:55
> 最初に一旦全部改行をとってしまう部分がある
見落としてました。不注意ですみません(^^;
» 15
[2502]Re: 特定文字列の抽出 | 投稿者:ヒロ | 投稿日:2009/02/28(Sat) 13:41:54
> (?s)』.*?『
の最初の(?s)は、どういう意味ですか?
よろしくお願いします。
» 16
[2504]Re: 特定文字列の抽出 | 投稿者:せうぞー | 投稿日:2009/02/28(Sat) 14:34:59
>の最初の(?s)は、どういう意味ですか?

ヘルプにも書いてあるんですが...
シングルラインモードです。ひとつのストーリーを単一行とみなします。

こちらもご参考にしてみてください。
http://www.seuzo.jp/st/Other/InDesign_regex.html
より詳しいPDF版ならこちら
http://www.seuzo.jp/indesign/regex_world_in_InDesign_CS3.pdf
#ただし、InDesign CS4では正規表現の実装が変わりましたので、若干違っている部分があります。予めご承知ください。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア