Ruby:在括号之间(不带括号)获取价值

时间:2018-07-16 15:25:27

标签: ruby regex parentheses

我有类似"untitled""untitled(1)""untitled(2)"的字符串。

如果要的话,我想获得括号之间的最后一个整数值。到目前为止,我尝试了很多正则表达式,对我来说有意义的(正则表达式是我的新手)看起来像这样:

  • number= string[/\([0-9]+\)/]
  • number= string[/\(([0-9]+)\)/]

,但它仍返回带有括号的值。

如果没有左右括号,则获得一个空字符串(或nil)会很好。例如"untitled($)",获取'$' char或nil或空字符串之类的方法就可以解决问题。对于"untitled(3) animal(4)",我想得到4

我一直在寻找许多有关如何执行此操作的主题,但是它似乎从未奏效……我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

/(?<=\()\w+(?=\)$)/与括号内的一个或多个单词字符(字母,数字,下划线)匹配,紧接在行尾之前:

words = %w[
    untitled
    untitled(1)
    untitled(2)
    untitled(foo)
    unti(tle)d
]
p words.map { |word| word[/(?<=\()\w+(?=\)$)/] }
# => [nil, "1", "2", "foo", nil]

答案 1 :(得分:0)

使用Regex作为String#[]的参数时,可以选择传入捕获的组的索引以提取该组。

  

如果提供了Regexp,则返回字符串的匹配部分。如果捕获遵循正则表达式(可能是捕获组索引或名称),则遵循正则表达式,而返回MatchData的组成部分。

string = "untitled(1)"
number = string[/\(([0-9]+)\)/, 1]
puts number
#=> 1