代码之家  ›  专栏  ›  技术社区  ›  Rajagopalan

使用最后一个下划线拆分字符串

  •  1
  • Rajagopalan  · 技术社区  · 7 年前

    "a_b_c" "a_b_c_d" "a_b_c_d_e" . 我想在最后一个下划线处拆分字符串。

    **input**
    'a_b_c'
    **output**
    a_b
    c
    
    **input**
    'a_b_c_d'
    **output**
    a_b_c
    d
    

    a='a_b_c'
    a=a.split('_')
    last=a.pop
    a.delete(last)
    p a.join("_")
    p last
    

    取得了成果,但我认为不应该这样做。我希望有一些正则表达式来实现这一点。有人能帮我吗?

    6 回复  |  直到 6 年前
        1
  •  7
  •   mrzasa    7 年前

    你可以用 String#rpartition

    'a_b_c_d_e'.rpartition(/_/)
    => ["a_b_c_d", "_", "e"]
    
    s = 'a_b_c_d_e'
    parts = s.rpartition(/_/)
    [parts.first, parts.last]
    => ["a_b_c_d", "e"]
    

    编辑:应用评论中的建议:

    'a_b_c_d_e'.rpartition('_').values_at(0,2)
    => ["a_b_c_d", "e"]
    
        2
  •  2
  •   Len Tango Ben    7 年前

    你真的需要分手吗?换个新的怎么样 _ 有空间吗?e、 g.使用 rindex []=

    a[a.rindex('_')] = ' '
    

    split 创建一个新数组,该数组通常需要更多资源,至少在其他语言中是这样。

        3
  •  2
  •   ray    7 年前

    您还可以获得如下值:,

    > a = a.split('_')
    > a[0..-2].join('_')
    # => "a_b_c_d" 
    > a[-1]
    # => "e" 
    
        4
  •  2
  •   Cary Swoveland    7 年前
    'a_b_c_d_e'.split /_(?!.*_)/
      #=> ["a_b_c_d", "e"]
    

    负面展望 (?!.*_)

        5
  •  2
  •   mi0    7 年前

    用正则表达式拆分它:

    a.split(/_(?=[^_]+$)/)
    

    说明:

    将字符u与正向前瞻相匹配(?=[^z]+$)

    $asserts位于字符串结尾处,或位于字符串结尾处的行终止符之前(如果有)

        6
  •  -1
  •   Steve Redka    7 年前

    str = 'a_b_c_d_e'
    # Remainder
    str[0...-2]    # -> 'a_b_c_d'
    
    # Last symbol
    str[-1]        # -> 'e'
    
    推荐文章