python统计txt文件中某个单词的出现次数

pro*_*ver 2 python regex

假设我们不需要关心大小写,所以我使用了 re.IGNORECASE。

我用正则表达式来解决这个问题。我是这样解决的:

total = 0
for line in alllines:
    count = 0
    count = len(re.findall(word, line, re.IGNORECASE))
    total += count
Run Code Online (Sandbox Code Playgroud)

但我遇到了一个我想知道的新问题。如果我只想要完整的单词怎么办?例如,如果该行包含“helloworld”,那么如果我的术语是“hello”,则不应将其计算在内。但我的方式会算数。有什么建议么?

Avi*_*Raj 5

要匹配完整的单词,需要使用单词边界。

count = len(re.findall(r'\b'+ word + r'\b', line, re.IGNORECASE))
Run Code Online (Sandbox Code Playgroud)

但这会hello匹配foo:hello:bar. 如果您不想要这种类型的匹配,那么您可以使用环视断言来匹配精确的完整单词。

count = len(re.findall(r'(?<!\S)'+ word + r'(?!\S)', line, re.IGNORECASE))
Run Code Online (Sandbox Code Playgroud)

如果word您确实想在正则表达式中传递包含特殊字符的内容,那么您需要re.escape在该单词上应用该函数,然后再在正则表达式中使用它。

count = len(re.findall(r'(?<!\S)'+ re.escape(word) + r'(?!\S)', line, re.IGNORECASE))
Run Code Online (Sandbox Code Playgroud)

(?<!\S)称为负向后查找,它断言匹配前面不会有非空格字符。为什么我们在这里使用断言意味着,它不会匹配任何字符,但它断言是否可能匹配。(?!\S)称为负向先行,断言匹配后面不会跟有非空格字符。即,除了非空格字符之外,匹配项后面可以有任何内容。