【问题标题】:Ruby regex match parentheses for subexpressionRuby 正则表达式匹配子表达式的括号
【发布时间】:2012-07-22 21:07:42
【问题描述】:

我正在尝试使用 ruby​​ 脚本解析一些代码,在某些时候我想通过使用 match 将字符串分成子字符串:

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*(.*)/)tmpo[2].sub("(","").sub(")","") 改为了,但我认为这不是最好的方法,我想要知道为什么第一个表达式是错误的。提前致谢。

【问题讨论】:

    标签: ruby regex parentheses


    【解决方案1】:

    该错误仅表示不匹配。也许如果您在运行正则表达式之前打印出nombre,您可能会看到为什么正则表达式与字符串不匹配。

    【讨论】:

    • 非常感谢:) ...这是一些意外的输入,但nombre与此无关,与匹配无关。
    • 糟糕,我的意思是extra。乐意效劳! :)