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

Python入门求助:将字符串中连续3位数字替换为@符号

替换字符串中连续三位数字为@符号

需求与示例

想要将字符串中每一组连续的3位数字替换为@@@(注意是连续三个数字字符,不是带分隔符的数字)。

输入示例:

input_str = "kJF534kdfkj23kk222"

期望输出:

output_str = "kJF@@@kdfkj23kk@@@"

尝试的代码及问题

作为Python初学者,我尝试了以下代码,但在for循环中遇到问题:

if i.isdigit() and (i+1).isdigit() and (i+2).isdigit():
    output = input.replace(i, "@")
    output=input.replace(i+1,"@")
    output=input.replace(i+2,"@")

解决方法

最适合初学者、且简洁高效的方式是用Python自带的re正则模块,专门处理这类模式匹配的字符串替换:

import re

input_str = "kJF534kdfkj23kk222"
output_str = re.sub(r'\d{3}', '@@@', input_str)
print(output_str)  # 运行后输出:kJF@@@kdfkj23kk@@@

代码说明

  • re.sub():正则替换函数,作用是把目标字符串中符合匹配模式的内容替换成指定字符串。
  • r'\d{3}':匹配规则,\d代表任意单个数字,{3}表示要连续匹配3个数字,正好对应你要找的连续三位数字组合。
  • 整个操作一步到位,自动遍历字符串找到所有符合条件的连续三位数字,替换成@@@。

你原来代码的问题

  • 字符不能直接做i+1运算:你这里的i应该是字符串里的单个字符,字符和数字相加会报错,正确的做法是通过索引访问字符串的位置,比如input_str[idx]、input_str[idx+1]。
  • 替换逻辑错误:每次调用input.replace()都是基于原始字符串修改,不是已经修改后的output,导致后面的替换会覆盖前面的结果,根本达不到批量替换的效果。
  • 循环逻辑复杂:就算修正了索引问题,循环处理时还会出现重复判断的情况(比如处理完索引0-2的数字后,索引1-2又会被重复检查),容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:40:31