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

如何在Ruby中使用.gsub替换字符串的每第4个字符?

Ruby 实现每第4个字符替换为下划线(附分组替代方案)

解决需求的两种方法

你想用gsub实现每第4个字符替换为下划线,这里提供两种可行方案:

方案1:正则表达式 + gsub

利用Ruby正则的正向预查功能,精准匹配每第4个字符并替换:

num = 17 # 替换成你的实际num值
total = (1..num).sum
final_output = total.to_s + "06bwsmnp851a"
# 匹配前面有3个字符的位置,替换当前字符为下划线
result = final_output.gsub(/(?<=.{3})./, '_')
puts result
  • (?<=.{3}):正向预查,确保当前字符前面刚好有3个任意字符(也就是当前是第4个字符)
  • .:匹配这个第4个字符,替换为_即可

方案2:字符数组遍历(更直观)

如果觉得正则不好理解,直接拆分字符数组处理:

num = 17
total = (1..num).sum
final_output = total.to_s + "06bwsmnp851a"
result = final_output.chars.each_with_index.map do |char, idx|
  # 位置从1开始计数,每4的倍数位替换为下划线
  (idx + 1) % 4 == 0 ? '_' : char
end.join
puts result

针对你给出的示例结果的补充

你提供的示例160_bws_np8_1a看起来更像是每3个字符分组后用下划线连接(而非替换第4个字符),如果这才是你的真实需求,用下面的代码更直接:

num = 17
total = (1..num).sum
final_output = total.to_s + "06bwsmnp851a"
# 每1-3个字符分一组,用下划线连接
result = final_output.scan(/.{1,3}/).join('_')
puts result
  • scan(/.{1,3}/):将字符串分割为最多3个字符的分组,最后一组不足3个也会保留
  • join('_'):把分组用下划线拼接,得到你示例中的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:34