【问题标题】:Ruby : get value between parenthesis (without those parenthesis)Ruby:在括号之间获取值(没有那些括号)
【发布时间】:2018-07-16 15:25:27
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 字符串 "untitled" 是否重要,或者是任何字符串的替代(例如,"cat(9)")?您还没有定义“价值”。它必须是非负整数(自然数)的字符串表示形式,如您的示例所示,还是可能为负整数(哪个)?如果字符串是"untitled""the cat in the hat""untitled($)""untitled(3) animal(4)",您希望返回什么?请编辑您的问题,而不是尝试在 cmets 中详细说明(这也应该阻止进一步的投票)。文字的精度与代码的精度一样重要。

标签: ruby regex parentheses


【解决方案1】:

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

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

【讨论】:

  • 我认为可以合理地假设括号可能围绕数字的字符串表示形式(鉴于示例)或不包含右括号的任意字符串(例如,"($)") ,但我认为没有将字符串限制为单词字符的依据。
  • 谢谢!它确实有效,我将查看文档以了解确切原因
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多