Python禁用split/find时,如何截取字符串并替换指定单词?
补全字符串单词替换代码的索引变量
需求说明
将字符串从开头截取至指定单词前,再从该单词末尾截取至结尾,中间插入新单词替换原单词。示例:将"I am a boy in a park."处理为"I am a girl in a park."。限制条件:不能使用split()、find()等内置方法。
问题分析
原代码的核心问题是未记录目标单词在原字符串中的起始索引,导致无法确定截取前后部分的边界。同时原代码的单词匹配逻辑存在硬编码错误(比如count ==3的判断),需要先修正匹配逻辑,记录下目标单词的起始位置。
修正并补全后的代码
sentence = input("Enter a sentence:") print(sentence) word = input("Enter a word:") print(word) count = 0 num_found = 0 start_idx = -1 # 新增:记录匹配到的单词起始索引 # 修正循环范围:避免漏查末尾字符 for i in range(len(sentence) - len(word) + 1): if sentence[i] == word[0]: count = 0 for j in range(len(word)): if sentence[i + j] == word[j]: count +=1 else: count = 0 break # 当整个单词匹配完成时,记录起始索引并计数 if count == len(word): print(" ", count, ":", word) num_found +=1 start_idx = i # 记录第一个匹配单词的起始位置 count = 0 print("Number of findings of the word:", num_found) replacement_word = input("Enter another word:") # 补全索引变量 first_cut = sentence[0:start_idx] print(first_cut) second_cut = sentence[start_idx + len(word):] print(second_cut) print(first_cut + replacement_word + second_cut)
关键补全说明
- 新增
start_idx变量:用于存储第一个匹配到的目标单词的起始索引,初始值设为-1表示未找到。 - first_cut的索引:
sentence[0:start_idx]——从字符串开头截取到目标单词的前一个字符。 - second_cut的索引:
sentence[start_idx + len(word):]——从目标单词的末尾(起始索引+单词长度)截取到字符串结尾。
注意事项
- 上述代码默认替换第一个匹配到的目标单词,如果需要替换所有匹配项,需要修改逻辑,收集所有匹配的起始索引后逐个替换。
- 如果未找到目标单词,
start_idx保持-1,此时截取结果会出错,可以添加判断逻辑处理这种情况(比如提示未找到单词)。
内容的提问来源于stack exchange,提问作者nooo
相关产品推荐
相关产品推荐

