0

ruby スクリプトを使用してコードを解析しようとしていますが、ある時点で、一致を使用して文字列を部分文字列に分割したいと考えています。

frase = "EXTREM(TIME2,FRE,NFRE,SDV,DEL,RMG)"

frase.match(/(\w*)\((.*)\)/)
=> #<MatchData "EXTREM(TIME2,FRE,NFRE,SDV,DEL,RMG)" 1:"EXTREM" 2:"TIME2,FRE,NFRE,SDV,DEL,RMG">

irb では期待どおりに動作しますが、これをスクリプト ファイル (procesa という関数内) に入れると、次のようになります。

tmpo = extra.match(/(\w*)\s*\((.*)\)/)
puts "#{nombre} calls #{tmpo[1]} with #{tmpo[2]}"

次のエラーが表示されます。

`block in procesa': undefined method `[]' for nil:NilClass (NoMethodError)
from f2f90.rb:141:in `each_index'
from f2f90.rb:141:in `procesa'
from f2f90.rb:166:in `block in <main>'
from f2f90.rb:166:in `each'
from f2f90.rb:166:in `<main>'

extra.match(/(\w*)\s*(.*)/)このサイトとグーグルを検索しましたが、運が悪かったのですが、何か不足していますか?、代わりにandを入れtmpo[2].sub("(","").sub(")","")ましたが、それが最善の方法だとは思いません。最初の表現が間違っている理由を知りたいです。前もって感謝します。

4

1 に答える 1

0

このエラーは単に一致がないことを意味します。おそらく、正規表現を実行する前に印刷するnombreと、正規表現が文字列と一致しなかった理由がわかるかもしれません。

于 2012-07-22T21:21:38.337 に答える