在括号之间检索内容

时间:2012-10-01 14:34:07

标签: ruby-on-rails

我需要检索括号之间的子串(不包括括号):

我尝试了以下操作,但它返回括号和括号之间的值。我想排除括号。

 a= "testing (EMI:30384)"
 a[/\(.*?\)/]   ***returns (EMI:30384)

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

()

之间捕获

\(\) escape()

\((.*)\)  

将匹配EMI:30384

enter image description here

irb(main):005:0> a= "testing (EMI:30384)"
=> "testing (EMI:30384)"
irb(main):006:0> p a.match(/\((.*)\)/)[1]
"EMI:30384"

答案 1 :(得分:1)

您需要在表达式中使用括号返回匹配组,并使用\1进行访问。这里有更多解释http://www.railsrocket.com/regular-expressions-in-ruby-and-rails

str = "testing (EMI:30384)"
ptrn = "/\((.*?)\)/"
str.gsub(ptrn, "\1")

答案 2 :(得分:1)

作为捕获组的替代方法,您可以使用后视并向前看,但对于您的用例而言可能过于复杂a[/(?<=\().*(?=\))/]完全给出了EMI:30384