• ベストアンサー

ruby 正規表現について教えてください。お願いします。

スイマセン初心者で、正規表現についてほかのみなさんにとっては、簡単なんだと思いますけど、どうかご回答お願いします。 テキストファイルを読み込んで、ある文字列の、ある場所だけを、出したいです。 テキストは #AAA#(aab acb dde) #BBB#(001) #AAA#(bca kme lmg) #BBB#(002) #AAA#の()の中身は適当な文字列で、他の文字が入ると考えての場合です。 この場合で、 #AAA#の文字列の、#AAA#と()を除いた文字列つまりこの場合だと、 aab acb dde bca kme lmg を出したいんです。 簡単な問題なんだと思いますけど、どうか回答お願いします。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

以下のスクリプトを実行して下さい。 while line = DATA.gets if /#AAA#\((.*)\)/ =~ line print $1,"\n"; end end __END__ #AAA#(aab acb dde) #BBB#(001) #AAA#(bca kme lmg) #BBB#(002) --------------------------------- $1に取得したい文字が格納されています。 正規表現で、マッチした部分を()でくくると、マッチしたとき$1に()内文字が格納されています。 ()が複数あれば、その()の順番対応に$1,$2,$3に格納されます。

aaa1205
質問者

お礼

ありがとうございます。 上手く実行できました。 また、理解しやすい説明ありがとうございます。 長い時間考えてたのがすぐ理解できました。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

ruby -n -e 'puts $1 if $_ =~ /#AAA#\((.*)\)/' < in_file > out_file か? ワンライナーで書くと Ruby っぽくないかも。

aaa1205
質問者

お礼

ワンライナーで書くやりかたは、まだあまりやったことないのですが、 もう少しrubyを理解できるようになったら是非挑戦してみたいです。

noname#39970
noname#39970
回答No.1

多分こんな感じ #AAA#\(([^)]+)\)

aaa1205
質問者

お礼

まさにこのとおりでできました。 ありがとうございます。

関連するQ&A

専門家に質問してみよう