0

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

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

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

但它仍然用括号返回我的值。

如果没有左括号,那么得到一个空字符串(或nil)会很好。诸如"untitled($)"获取'$'字符或nil空字符串之类的情况就可以了。对于"untitled(3) animal(4)",我想得到4

我一直在寻找很多关于如何做到这一点的主题,但它似乎从来没有工作过......我在这里错过了什么?

4

2 回答 2

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]
于 2018-07-16T15:37:15.197 回答
0

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

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

string = "untitled(1)"
number = string[/\(([0-9]+)\)/, 1]
puts number
#=> 1
于 2018-07-16T15:29:32.267 回答