代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm atk

从Ruby字符串中提取最后n个字符

  •  94
  • Andrew Grimm atk  · 技术社区  · 15 年前

    得到最后一个 n 字符串中的字符,我想您可以使用

    ending = string[-n..-1]
    

    但如果字符串小于 n 字母长,你会 nil .

    有哪些解决方法可用?

    背景 :字符串是纯ASCII,我可以访问Ruby1.9.1,并且我使用的是纯旧Ruby对象(没有Web框架)。

    8 回复  |  直到 7 年前
        1
  •  91
  •   nostopbutton Gareve    11 年前

    这里有一个一行程序,您可以输入一个大于字符串大小的数字:

    "123".split(//).last(5).to_s
    

    红宝石1.9 +

    "123".split(//).last(5).join("").to_s
    

    对于Ruby 2.0+,Join返回一个字符串

    "123".split(//).last(5).join
    
        2
  •  103
  •   perimosocordiae    15 年前

    嗯,我能想到的最简单的解决方法是:

    ending = str[-n..-1] || str
    

    (编辑: or 运算符的优先级低于赋值,因此请确保使用 || 取而代之的是)

        3
  •  38
  •   Zack Xu    7 年前

    在纯红宝石(没有轨道)中,您可以

    string.chars.last(n).join
    

    例如:

    2.4.1 :009 > a = 'abcdefghij'
     => "abcdefghij"
    2.4.1 :010 > a.chars.last(5).join
     => "fghij"
    2.4.1 :011 > a.chars.last(100).join
     => "abcdefghij"
    

    如果您使用RubyonRails,那么可以调用方法 first last 在字符串对象上。这些方法是首选的,因为它们简洁直观。

    例如:

    [1] pry(main)> a = 'abcdefg'                                                                                                                
     => "abcdefg"
    [2] pry(main)> a.first(3)                                                                                                                   
     => "abc"
    [3] pry(main)> a.last(4)                                                                                                                    
     => "defg"
    
        4
  •  13
  •   Andrew Grimm atk    15 年前
    ending = string.reverse[0...n].reverse
    
        5
  •  8
  •   Sunil    13 年前

    要从字符串中获取最后n个字符,可以这样做

    a[-n,n]如果a是数组。

    这是一个例子,如果你想要的话。

    ruby-1.9.2-p180:006>a=“911234567890”

    =>“911234567890”

    鲁比-1.9.2-p180:009>A[-5,5]

    =“67890”

    Ruby-1.9.2-p180:010>A[-7,7]

    =“4567890”

        6
  •  8
  •   enrico.bacis    9 年前

    您可以使用以下代码:

    string[string.length-n,string.length]
    
        7
  •  5
  •   EmFi    15 年前

    你试过雷吉士吗?

    string.match(/(.{0,#{n}}$)/)
    ending=$1
    

    regex在字符串末尾捕获尽可能多的字符,但不超过n。并将其存储在$1中。

        8
  •  1
  •   sawa    12 年前

    EMFI答案的改进。

    string[/.{,#{n}}\z/m]