Python中字符串分配律应用问题:长文本处理失效排查
字符串分配律处理代码的问题排查与修复
问题根源
原代码的循环逻辑完全错误,无法正确提取两个字符串的连续公共前缀:
- 外层循环遍历左半部分字符时,内层循环只拿右半部分的第一个字符做一次比对
- 只要匹配到第一个相同字符,就通过两次
break直接终止所有循环,后续的公共字符(比如示例里的第二个a、两个b)根本没机会被处理 - 最终
similar只能拿到第一个匹配的字符,自然出不来aabb这种完整前缀
修复方案
正确的做法是按顺序逐个比对两个字符串的对应位置字符,直到碰到不匹配的为止,把所有连续匹配的前缀收集起来:
修正后的代码
inputString = input("Enter Regular Expression: ") def distributionOfAnExpression(): if "+" not in inputString: return inputString # 拆分加号两边的表达式 left, right = inputString.split("+") similar = [] # 同步遍历两个字符串的对应位置字符 for l_char, r_char in zip(left, right): if l_char == r_char: similar.append(l_char) else: # 碰到不匹配的就停止遍历 break similar = ''.join(similar) # 用removeprefix精准去掉前缀,再拼接结果 result = f"{similar}({left.removeprefix(similar)}+{right.removeprefix(similar)})" print(result) distributionOfAnExpression()
关键改进点
- 用
zip()同步遍历左右两部分的对应字符,保证按顺序比对前缀 - 遇到不匹配字符立刻停止,只收集连续的公共前缀
- 替换原代码里的
strip()为removeprefix():strip()会移除所有包含的字符(不管位置),而removeprefix()只去掉开头的前缀,逻辑更精准 - 用列表存储字符再拼接,比直接累加字符串效率更高
测试结果
- 输入
ab+ac,输出a(b+c) - 输入
aabbcd+aabbgf,输出aabb(cd+gf)
内容的提问来源于stack exchange,提问作者saad
相关产品推荐
相关产品推荐

