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

