我有类似"untitled"
,"untitled(1)"
或"untitled(2)"
的字符串。
如果要的话,我想获得括号之间的最后一个整数值。到目前为止,我尝试了很多正则表达式,对我来说有意义的(正则表达式是我的新手)看起来像这样:
number= string[/\([0-9]+\)/]
number= string[/\(([0-9]+)\)/]
,但它仍返回带有括号的值。
如果没有左右括号,则获得一个空字符串(或nil
)会很好。例如"untitled($)"
,获取'$'
char或nil
或空字符串之类的方法就可以解决问题。对于"untitled(3) animal(4)"
,我想得到4
。
我一直在寻找许多有关如何执行此操作的主题,但是它似乎从未奏效……我在这里缺少什么?
答案 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