Python中实现字符串字符按后续数字重复的方法求助
没问题!这种字符串展开的需求在Python里有好几种实用的实现方式,我给你整理两个常用方案:
方案1:正则表达式(最简洁)
用Python的re模块匹配每个「字符+数字」的组合,直接替换成重复后的字符,代码非常简洁:
import re def expand_string(s): # 正则匹配单个字母(可根据需求调整匹配范围)和后面的数字 return re.sub(r'([a-zA-Z])(\d+)', lambda match: match.group(1) * int(match.group(2)), s) # 测试示例 print(expand_string('s3t2')) # 输出: ssstt print(expand_string('w4')) # 输出: wwww print(expand_string('x1y2z4')) # 输出: xyyzzzz print(expand_string('a10b3')) # 输出: aaaaaaaaaabbb(支持多位数字)
说明:
- 正则模式
([a-zA-Z])(\d+):[a-zA-Z]匹配单个字母(如果需要支持其他字符比如下划线,可改成\w),\d+匹配一个或多个数字(兼容多位数字的情况)。 lambda函数拿到匹配结果后,把第一个分组的字符重复第二个分组的数字次数,完成替换。
方案2:手动遍历解析(更灵活,易扩展)
如果不想依赖正则,或者需要更精细的格式校验,可以手动遍历字符串解析,还能方便处理异常情况:
def expand_string_manual(s): result = [] i = 0 str_length = len(s) while i < str_length: # 提取当前字符 current_char = s[i] i += 1 # 收集后面所有连续的数字(处理多位数字) num_str = '' while i < str_length and s[i].isdigit(): num_str += s[i] i += 1 # 校验格式:如果字符后没有数字,抛出异常 if not num_str: raise ValueError(f"格式错误:字符 '{current_char}' 后未跟随数字") # 重复字符并加入结果列表 result.append(current_char * int(num_str)) return ''.join(result) # 测试示例 print(expand_string_manual('s3t2')) # ssstt print(expand_string_manual('x1y2z4')) # xyyzzzz # 测试异常情况(会抛出 ValueError) # print(expand_string_manual('st2'))
说明:
- 用索引遍历字符串,先取字符,再收集后续所有连续数字,避免了正则的黑盒逻辑,更容易调试和修改。
- 加入了格式校验,如果输入不符合「字符+数字」的规则,会直接抛出明确的错误提示,方便排查问题。
你可以根据自己的需求选择合适的方案,两种方法都能完美处理你给出的示例场景~
内容的提问来源于stack exchange,提问作者Parthasarathy Balaraman
相关产品推荐
相关产品推荐

