如何用re.findall统计txt文件中指定单词的出现次数
修复用re.findall统计文本中单词出现次数的代码
嘿,我瞅了下你写的代码,有几个小问题导致它没法正常工作,我给你梳理下并修正:
原代码的问题点:
re.findall('Hello')用法错误:re.findall()必须传入两个参数,第一个是正则表达式,第二个是要匹配的目标字符串(这里就是每一行的line),少了第二个参数会直接报错。- 变量
total的赋值逻辑错了:你每次循环都把total直接替换成re.findall的返回结果(一个列表),而不是累加匹配到的次数。应该用len()获取列表长度,再累加到total上。 print total的缩进不对:如果放在循环里,会每读一行就打印一次当前的total,我们需要的是读完所有内容后打印总次数,所以要把它移到循环外面。
修正后的代码:
# -*- coding: utf-8 -*- import re total = 0 with open('text.txt') as f: for line in f: # 用findall找到当前行所有匹配的"Hello",取长度累加到total matches = re.findall('Hello', line) total += len(matches) # 循环结束后打印总次数 print(total)
额外优化建议:
如果需要不区分大小写的匹配(比如匹配"hello"、"HELLO"也算),可以给re.findall加第三个参数re.IGNORECASE:
matches = re.findall('Hello', line, re.IGNORECASE)
如果要匹配独立的单词(比如避免把"HelloWorld"里的"Hello"也算进去),可以用正则的单词边界\b:
matches = re.findall(r'\bHello\b', line)
内容的提问来源于stack exchange,提问作者Markel
相关产品推荐
相关产品推荐

