如何在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
相关产品推荐
相关产品推荐

