Ruby配列の正規表現を使用してテキストファイルを検索する方法

このQ&Aのポイント
  • テキストファイル内の数万行のテキストを数百の正規表現パターンで検索するRubyスクリプトを作成する方法について教えてください。
  • ファイルを1行ずつ読み込み、定義した正規表現パターンと一致する行を出力します。
  • 初心者ですので、他の方法やアドバイスもいただけると助かります。
回答を見る
  • ベストアンサー

ruby 配列の中の正規表現は比較に使える?

数万行あるテキストファイルの中を数百パターンくらいの正規表現で サーチするRubyスクリプトを作成しようとしていますがうまくできません。 どなたかお知恵を拝借させてください。 以下の流れで作ろうとしています。 「 ファイルを一行GETして、その行が事前に定義した配列内の正規表現に合致していればprintする。 次の行をGETして、最初からた正規表現の配列を比較して、合致していればprintする。 テキストファイルが終わるまで、繰り返し 」 何分初心者なもので…、他のやり方があれば教えていただきたいです… ヨロシクお願いしますm(__)m

  • moxa
  • お礼率51% (71/137)
  • Ruby
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

素直に書くとこんな感じでしょうか http://ideone.com/FJDTo 予め一つの正規表現にまとめておくという考え方もありそうですが、数百となると試したこと無いですね・・・ http://ideone.com/KqRbw

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

pattern = [/aa/,/ff/,/gg/] upat = Regexp.union(*pattern) IO.foreach("foo.txt") do |line| puts line if upat =~ line end

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

こんなのとか: http://codepad.org/gcKSVXH8

関連するQ&A

  • ruby 正規表現

    こんばんは。 Rubyでの正規表現での質問なのですが、 例えば"hoge"という文字が含まれる行全体にマッチさせるような正規表現は存在するのでしょうか? また存在する場合はどのように記述すれば良いのでしょうか。 単純な質問で申し訳ありませんが、よろしくお願いいたします。

  • Rubyにおける正規表現(一致しない)

    Rubyを使って、テキスト処理をやっています。 どうしても、うまく行かないところがあります。 サジェスチョンをお願いします。 正規表現にて、 2つの条件フラグが成立していて、かつ、特定の文字列を含まないという条件です。 1行の内容は、textに入っています。 if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then xxxxxxxx end (!/abc def/)は、perlでの表現です。Rubyでは、少なくとも (!/abc def/=~text) かな、と考えましたが、ダメでした。 (/abc def/!=text) でも、だめでした。 宜しくお願いいたします。

  • Rubyで配列をソートする

    15(tab)5634(改行) 24(tab)4446(改行) 24(tab)8357(改行) 24(tab)3287(改行) 56(tab)5465(改行) 56(tab)1324(改行) 56(tab)7544(改行) 上記のように1行にtabで区切られた2つの数値が並んでいるテキストファイルがあります。 このファイルを、Rubyを使って1列目が同じ数字の行ごとにソートしたいのですが、できなくて困っています。 上の例でしたら、1列目が24の3行を2列目の数値をキーとしてソート、1列目が56の3行を2列目の数値をキーとしてソートするということです。 一行ずつ読み込んで、array = line.split(/\t/)でタブでくぎって配列に格納するスクリプトを書いていたのですが、どうしてもできないので、力を貸していただけないでしょうか。 よろしくお願いします。

  • java正規表現で複数行を取得し配列にする

    javaの正規表現で、下記のようなテキストファイルから配列を作成しようと思っています。 ---------------- .title1 hoge fuga ..title2 hoge2 fuga2 ---------------- ↓ Array[0] = ".title1 hoge fuga" Array[1] = "..title2 hoge2 fuga2" このようなテキストファイルで、上に示したように行頭が[ . ]の行から、次の行頭が[ . ]の行の直前の行までを配列の一つの要素としたいのですが、どのようにすればいいでしょうか ^\.[\w|\W]+ この表現では、「.title1」からテキストの最後までが一致してしまいます。かといって、 ^\.[\w|\W]+^\. としてしまうと、こんどは「.title2」から始まる部分の取得ができなくなってしまいます。 なにかいい方法はありませんでしょうか。正規表現以外でも構いません。よろしくお願い致します

    • ベストアンサー
    • Java
  • 正規表現でテキスト処理をしてDBに戻す

    プログラミングもrubyも初心者です。 2008121407030202,14(1,2)13,4(3,8,9,15)7,12-(5,6,11)10 2008122109050607,(*3,6)12,4(1,13)-(7,11)-(8,9)5=2 10 2009011008010309,3,8,13,9(1,12)(2,6)(10,7)(4,11)5 ↓ 2008121407030202,14,(1,2),13,4,(,3,8,9,15,),7,12,-,(,5,6,11,),10, 2008122109050607,(,*,3,6,),12,4,(,1,13,),-,(,7,11,),-,(,8,9,),5,=2, ,10, 上段のようなテキストを下段のように数字ごとに区切ってDBに戻したいと考えています。rubyに読みこんで正規表現でどうにかして配列に入れていくのかと思いますが どこから手を付ければいいか取っ掛かりが分かりません。 考え方や参考になるサイトでも結構ですのでご教授ください。

  • 正規表現で検索するときのパターンについて

    VBScriptの正規表現で、100行くらいのテキストファイルを対象に検索を行いたいのですが、その中の一行に単語1と単語2と単語3の3つの単語が全て含まれるそういう行があるかないかを調べるには、どういうパターンにすればいいでしょうか? (単語1と単語2と単語3の順番は問いません。) ご教授のほどよろしくお願いいたします。

  • rubyの正規表現で"["を使いたいのですが、正しく実行できません

    rubyの正規表現で"["を使いたいのですが、正しく実行できません #! ruby -Ks a ="test[test" b ="test[" if /#{b}/ =~ a print "hit" end エラー内容は test.rb:4: invalid regular expression; '[' can't be the last character ie. can't start range at the end of pattern: /test[/ (RegexpError) "\["と文字を入力することで解決するかと思いましたが上手くいきませんでした。 rubyのバージョンは1.8.2です。宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • ruby on railsのscaffoldで配列を定義するには

    ruby on railsのscaffoldで配列を定義するには rails2.3での質問です。 通常、scaffoldで >ruby script/generate migration TestData name:string id:integer のようにデータ構造を指定すると思うのですが、この時に配列を定義するには どうしたら良いのでしょうか? 通常の(C言語のような)配列でもハッシュでも構いません。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • Rubyの正規表現について

    こんにちは!Rubyを勉強し始めたものです。 現在正規表現を勉強しており、以下のプログラム問題を解いています。 下記の「puts format_ssns~」部分がtrueになるようにメソッドを定義しなければならないのですが、どうしても「.」の「-」変換はなんとかなるのですが、同時に「234601422」にハイフンを挿入するのがうまくいきません…… 以下プログラムになります。 拙い質問で恐縮ですが、どうぞよろしくお願いいたします。 --- def format_ssns(string) #ここにプログラムを記入する形式 end puts "format_ssns finds and reformat any SSNs in the string" puts format_ssns("234601422, 350.80.0744, 013-60-8762") == "234-60-1422, 350-80-0744, 013-60-8762"

  • [vb.net]正規表現でスクリプトを解析したい

    自前のスクリプト言語を記載した次の様なテキストファイルをSub毎に処理するために Script.txt ------------------------------------------------- #sub1{ code { code }; }; #sub2{ code }; #sub3{ }; ------------------------------------------------- [EOF] 正規表現を使って次の様に配列に分解できれば熱いと思ってやってみたのですが、なかなかうまくできません。方法などありましたら、ご教授ください。 ↓望むすがた… dim$(0)=" #sub1{ code { code }; }; " dim$(1)=" #sub2{ code }; " dim$(2)=" #sub3{ }; " 駄目だった正規表現:(\#.*\{)(\s*.*) なかなかうまくいきません。よろしくお願いします。開発言語はVB.net 2003です。