如何修正统计TXT文件中与其他字母连写的目标单词出现次数的代码?
修正统计与其他字母连写的目标单词出现次数的代码
你的代码目前存在几个关键问题,导致没法准确统计目标单词的连写次数,我来一步步帮你搞定:
原代码的核心问题
- 漏检多行/多匹配:
line.find('Hello')只能找到该行第一个Hello的位置,如果一行里有多个符合条件的连写情况,后面的都会被漏掉。 - 判断逻辑太片面:你只排除了
Hello在行首的情况,但完全没考虑它是否真的和其他字母连写——比如Hello在行尾且前面是空格(这是独立单词)会被错误统计,而Helloa这种在行首的连写情况却会被直接忽略。 - 语法错误:在Python3里,
print total是无效写法,必须改成print(total)。
靠谱的修正方案:用正则精准匹配
要准确抓出和其他字母连写的目标单词,正则表达式是最省心的方式。我们可以匹配那些前后至少有一个字母和目标单词相连的情况,代码如下:
import re total = 0 target_word = 'Hello' # 用re.escape避免目标单词里的特殊字符干扰正则 corrected_pattern = re.compile( r'\b[a-zA-Z]*' + re.escape(target_word) + r'[a-zA-Z]*\b' ) with open('text.txt', 'r') as f: for line in f: # 找到所有包含Hello的非独立单词(和字母连写的情况) connected_words = corrected_pattern.findall(line) total += len(connected_words) print(total)
针对你的示例说明
你的示例文本是Hello oo, how are you?,如果预期输出是1,说明你的需求可能不是“和字母连写”,而是“目标单词不是单独出现”(比如前后有任意非空格字符)。如果是这样,可以把正则改成:
pattern = re.compile( r'(?<!\s)' + re.escape(target_word) + r'|' + re.escape(target_word) + r'(?!\s)' )
不过按照“与其他字母连写”的定义,这个示例里的Hello是独立单词,应该计数0,所以可能你示例的描述或者需求有小偏差,可以根据实际情况调整判断逻辑。
不用正则的手动实现
如果你不想用正则,也可以手动遍历每个匹配位置,检查前后字符:
total = 0 target_word = 'Hello' word_length = len(target_word) with open('text.txt', 'r') as f: for line in f: start_pos = 0 while True: # 找到下一个Hello的位置 current_pos = line.find(target_word, start_pos) if current_pos == -1: break # 检查是否和字母连写:前一个是字母,或者后一个是字母 is_connected = False # 检查前面的字符 if current_pos > 0 and line[current_pos - 1].isalpha(): is_connected = True # 检查后面的字符 if (current_pos + word_length) < len(line) and line[current_pos + word_length].isalpha(): is_connected = True if is_connected: total += 1 # 移动起始位置,避免重复匹配同一个Hello start_pos = current_pos + word_length print(total)
内容的提问来源于stack exchange,提问作者Markel
相关产品推荐
相关产品推荐

