正则表达式以获取括号之间的值

时间:2018-04-04 09:40:44

标签: ruby regex

我正在尝试编写一个正则表达式来获取括号之间的值。我希望没有括号的值。例如,给定:

value = "John sinu.s(14)" 

我希望得到14

我尝试了以下内容:

value[/\(.*?\)/]

但它会给出结果(14)。请帮帮我。

5 个答案:

答案 0 :(得分:3)

您可以使用

执行此操作
value[/\((.*?)\)/, 1]

value[/\(([^()]*)\)/, 1]

使用capturing group和第二个参数仅提取组值。

请注意,\((.*?)\)也将匹配包含(字符的子字符串,第二个选项仅匹配不包含(和{{1}的括号之间的子字符串因为)negated character class,它匹配除[^()](之外的任何字符。

请参阅Ruby demo online

来自Ruby docs

  

)
  如果提供了str[regexp, capture] → new_str or nil,则返回字符串的匹配部分。如果捕获遵循正则表达式(可能是捕获组索引或名称),则遵循正则表达式,而Regexp的组件将返回

如果您需要提取多个匹配项,请使用MatchData

String#scan

请参阅another Ruby demo

答案 1 :(得分:2)

另一种选择是使用像这样的非捕捉环境

value[/(?<=\().*(?=\))/]

(?<=\() - 正面看后面确保有(但不要抓住它 (?=\)) - 积极向前看确保正则表达式以)结尾,但不要抓住它

答案 2 :(得分:0)

尝试使用此正则表达式

/\((.*?)\)/
  • \(将匹配字符串
  • 中的左括号
  • (.*?)创建capturing group
  • \)将与您的右括号
  • 相匹配

答案 3 :(得分:0)

您可以使用

/(?<=\()[^\)]+/g

选择不带括号的括号内的字符串

  

只有你需要的是&#34;积极向前看&#34;特征

关注this link,了解有关特殊群组中positive lookahead的更多信息。 我不知道它是否支持ruby

答案 4 :(得分:0)

您是希望在括号之间提取字符串还是使用正则表达式执行此操作?你在问题中指定后者,但可以想象你的问题实际上是前者,你假设必须使用正则表达式。

如果你只是想要这个值,而不是对用于获取它的方法有任何限制,那么你可以使用String#indexString#rindex完成这项工作。

s = "John sinu.s(14)"

s[s.index('(')+1 .. s.rindex(')')-1]
  #=> "14"