You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中实现按指定次数重复字符串中的字符?

如何在Ruby中将"A3B2C3D4"转换为"AAABBCCCDDDD"?

嘿,这个需求在Ruby里处理起来超顺手的,我给你分享几个实用的实现方式,你可以根据自己的场景选:

方法一:正则匹配 + Map拼接(最常用)

Ruby的正则表达式能轻松捕获每个字母和后面跟着的数字,再配合字符串重复方法就能快速搞定:

input = "A3B2C3D4"
result = input.scan(/([A-Z])(\d)/).map { |char, num| char * num.to_i }.join
puts result # 输出 AAABBCCCDDDD

给你拆解下:

  • scan(/([A-Z])(\d)/)会把原字符串拆成一个个包含字母和对应数字的子数组,比如[["A","3"], ["B","2"], ["C","3"], ["D","4"]]
  • map遍历每个子数组,把字母重复数字指定的次数(注意要把字符串数字转成整数)
  • 最后用join把所有重复后的片段拼接成完整字符串

方法二:逐个字符遍历(适合精细控制)

如果需要更灵活的逻辑(比如中途加一些额外处理),可以手动遍历每个字符:

input = "A3B2C3D4"
result = []
current_char = nil

input.each_char do |c|
  if c.match?(/[A-Z]/)
    current_char = c  # 遇到字母就先存起来
  else
    result << current_char * c.to_i  # 遇到数字就把存好的字母重复对应次数,加入结果数组
  end
end

puts result.join # 输出 AAABBCCCDDDD

用数组存结果片段比直接拼接字符串更高效,尤其是处理长字符串的时候。

方法三:一行搞定的GSUB写法

想追求代码简洁?用gsub直接替换就行,一行代码搞定:

input = "A3B2C3D4"
result = input.gsub(/([A-Z])(\d)/) { $1 * $2.to_i }
puts result

这里gsub会找到所有符合字母+数字的匹配项,然后用块里的结果替换它们——$1代表捕获到的字母,$2是捕获到的数字,转成整数后重复字母即可。

额外小提示

如果你的输入里包含小写字母,把正则里的[A-Z]改成[A-Za-z]就行;要是数字可能是多位数(比如"A10B5"这种),把正则改成([A-Z])(\d+)就能匹配多个数字啦!

内容的提问来源于stack exchange,提问作者Bloomberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:58:48