如何将Ruby中的字符串拆分为一行代码中的两个变量?

Lei*_*eif 2 ruby string split

在Ruby中,如何在一行代码中将字符串拆分为两个变量?

例:

目标:将字符串分割s成变量ab,这样a= 'A'b= 123.

irb(main):001:0> s = "A123" # Create string to split.
=> "A123"

irb(main):002:0> a, b = s.split(/\d/) # Extracts letter only.
=> ["A"]

irb(main):003:0> puts a # a got assigned 'A' as expected.
A
=> nil

irb(main):004:0> puts b # b did not get assigned the split remainder, '123'.
=> nil

irb(main):005:0> b = s.split(/\D/) # Extracts number only.
=> ["", "123"]

irb(main):006:0> puts b # Now b has the value I want it to have.
123
=> nil
Run Code Online (Sandbox Code Playgroud)

如何在一行代码中实现相同的结果?

Ale*_*kin 7

有很多方法,例如在这种特殊情况下的正面观察会做:

a, b = 'A123'.split(/(?<=\D)/)
#? ["A", "123"]
Run Code Online (Sandbox Code Playgroud)

切片限制的正向前瞻:

'AB123'.split(/(?=\d)/, 2)
#? ["AB", "123"]
Run Code Online (Sandbox Code Playgroud)

按指数:

[0..1, 2..-1].map &'AB123'.method(:[])
#? ["AB", "123"]
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 5

您可以使用scan以下字符串代替将前向和后向分割,将其标记为数字和非数字/\d+|\D+/

"AB123".scan(/\d+|\D+/)
# => [AB, 123]
Run Code Online (Sandbox Code Playgroud)

模式匹配

  • \d+ -1个或更多数字
  • | - 要么
  • \D+ -除数字外的1个或多个字符。