我该如何拆分这个字符串.
"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"]
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它从来没有奏效.
ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/)
=> ["", "1", "", "3"]
Run Code Online (Sandbox Code Playgroud)
bry*_*mck 28
split将只使用匹配的任何内容作为分隔符,将其从相关字符串中删除.你在寻找的是scan:
str = "6885558 8866887777"
str.scan(/((\d)\2*)/).map(&:first)
# => ["6", "88", "555", "8", "88", "66", "88", "7777"]
Run Code Online (Sandbox Code Playgroud)
慢慢来,\d匹配任何数字.它位于第二个捕获组中,因此\2*匹配同一个数字的任何其他出现.这会产生一个看起来像的数组
[["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"],
["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]]
Run Code Online (Sandbox Code Playgroud)
由于我们只需要每个子数组中的第一个项目,因此我们可以将它们全部收集起来map(&:first).
(注意,str.scan(/(\d)\1*/)只会从第一个捕获组中生成一个数组,这意味着我们只能从一系列可能重复的数字中获得一个数字.)
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |