Python提取大写单词代码移除逗号后内容丢失问题求助
问题排查与代码修正
原代码核心问题
- 无效的标点处理:
text.replace(',','')不会修改原字符串(Python字符串不可变),且目标错误地指向整个文本而非单个单词,导致打印的单词仍带标点。 - 句子拆分逻辑缺陷:用
split('.')拆分句子会生成空字符串(如输入末尾的句号会产生空元素),引发无效循环。 - 非句首判断不严谨:直接对比
word != words[0],若句首单词带标点(如"Hello,"),后续相同单词不带标点会被误判,反之亦然。 - 未提前清理单词标点:判断首字母大写前未处理单词首尾标点,导致带标点的单词(如
"Cambridge,")虽符合条件,但后续标点处理混乱。
修正后的代码
import re text = input().strip() # 用正则拆分有效句子,避免空字符串 sentences = re.split(r'(?<=[.!?])\s+', text) result = [] word_count = 1 for sentence in sentences: # 提取句子中所有纯单词(去除标点) clean_words = re.findall(r'\b\w+\b', sentence) if not clean_words: continue first_clean_word = clean_words[0] # 遍历原带格式的单词以维持计数准确性 for raw_word in sentence.split(): # 提取单词的核心内容(去掉首尾标点) core_word = re.search(r'\w+', raw_word).group() # 首字母大写且非句首单词 if core_word[0].isupper() and core_word != first_clean_word: result.append((core_word, word_count)) word_count += 1 if result: for word, index in result: print(f"{index}:{word}") else: print('None') print(result)
修正说明
- 精准标点清理:通过正则
re.search(r'\w+', raw_word)提取单词的字母数字核心部分,彻底去除首尾标点。 - 可靠句子拆分:用正则
(?<=[.!?])\s+匹配句子结尾的标点后空格,拆分出的每个元素都是有效句子,无空字符串干扰。 - 严谨条件判断:对比清理后的单词与句首单词,避免标点导致的误判。
- 有效计数维护:遍历原始拆分的单词保证索引计数准确,同时用清理后的单词做判断逻辑。
测试验证
输入:
The Massachusetts Institute of Technology is a private research university located in Cambridge, Massachusetts, United States.
输出:
2:Massachusetts 3:Institute 5:Technology 13:Cambridge 14:Massachusetts 15:United 16:States [('Massachusetts', 2), ('Institute', 3), ('Technology', 5), ('Cambridge', 13), ('Massachusetts', 14), ('United', 15), ('States', 16)]
内容的提问来源于stack exchange,提问作者lordorun
相关产品推荐
相关产品推荐

