繁体   English   中英

红宝石通过重复字符或空格来分割字符串

[英]ruby split string by repeating characters or a space

我如何拆分此字符串。

"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"] 

我试过了,但是没有成功。

ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/)
 => ["", "1", "", "3"] 

split将只使用匹配的任何内容作为分隔符,将其从相关字符串中删除。 您正在寻找的是scan

str = "6885558 8866887777"
str.scan(/((\d)\2*)/).map(&:first)
# => ["6", "88", "555", "8", "88", "66", "88", "7777"]

慢慢看, \\d匹配任何数字。 它在第二个捕获组中,因此\\2*然后匹配同一位数字的任何其他出现。 这产生一个看起来像的数组

[["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"],
 ["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]]

由于我们只希望每个子数组中的第一项,因此可以使用map(&:first)收集它们。

(请注意, str.scan(/(\\d)\\1*/)只会从第一个捕获组中产生一个数组,这意味着我们只能从可能重复的数字序列中得到一个数字。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM