Python 使用正则表达式计算字符串中的单词

Python 使用正则表达式计算字符串中的单词,python,regex,Python,Regex,在过滤掉一些字符后,我试图计算每个单词在长文本字符串中的出现次数,例如“!”#$%&'()*,-./:@[].“我是用正则表达式做的 以及重新格式化要用制表符分隔的输出 因此,我面临两个问题: 1-在函数中使用return只产生了第一行,但是当用print函数替换时,它工作得很好。但是我担心使用print代替return 2-在TMC服务器上,它返回一个我不理解的错误 错误:- Failed: test.test_word_frequencies.WordFrequencies.test_fir

在过滤掉一些字符后,我试图计算每个单词在长文本字符串中的出现次数,例如“!”#$%&'()*,-./:@[].“我是用正则表达式做的

以及重新格式化要用制表符分隔的输出

因此,我面临两个问题:

1-在函数中使用return只产生了第一行,但是当用print函数替换时,它工作得很好。但是我担心使用print代替return

2-在TMC服务器上,它返回一个我不理解的错误

错误:-

Failed: test.test_word_frequencies.WordFrequencies.test_first
        'NoneType' object is not subscriptable

Test results: 1/2 tests passed
 50%[????????????????????????????????????????????????????????????????]
以下是我目前的进展:-

def word_frequencies(file):
    import re
    from collections import Counter

    counts = []
    inputfile = open(file,"r")
    textfile = inputfile.read()
    pattern = re.compile(r'([\!\"\#\$\%\&\'\(\)\*\,\-\\.\\\/\:\;\?\@\[\]\_])')
    file_clean = re.sub(pattern,"",textfile)
    words = file_clean.split()
    for word in words:
        counts.append(Counter(words)[f'{word}'])
    for word,count in zip(words,counts):
        print(f"{word}\t{count}")
我不确定在最后一个for循环中使用返回函数是否明智,因为它返回:-

'The\t64'
而不是:-

The 64
Project 83
Gutenberg   27
EBook   3
of  303
Alice   166
etc...

我不确定此错误来自何处。

Return语句返回您要添加到列表中的内容

以你为例,

for word,count in zip(words,counts): 
    result.append(f"{word}\t{count}")
print(result)
这是print语句,您正在打印列表而不是元素本身。请尝试下面的方法

for data in result:
    print(data)

return
退出函数,因此在循环第一次点击
return
指令后,您将看不到任何来自循环的进一步输出。如果希望函数返回数据集合,请在函数内创建数组、列表、映射等,在循环内添加到它,并在末尾返回集合对象。Al所以,你不需要转义不是字母表一部分的每个字符。你上面发布的模式可以简化为
r“[!\”\$%&'()*,.\\/:;?@[\]\-]“
。感谢你简化了正则表达式,但我也必须转义,因为我使用单引号,但我得到了这个概念。另一方面,谢谢你,如果我使用一个列表作为输出,它不会在每行返回单个字符串,而是一个列表,而且不会正确地解释\t我为此使用了一个for循环:`for word,count in zip(words,counts):result.append(f“{word}\t{count}”)print(result)`但它返回的列表是:`['The\t64','Project\t83','Gutenberg\t27','EBook\t3','of\t303','Alice\t166','in\t214','Wonderland\t3','by\t44','Lewis\t3','Carroll\t3','This\t13','EBook\t6','is\t62','for\t64','The\t735','use\t12','of\t303我在上面的主要问题
中对单词使用了类似的概念:counts.append(Counter(Counter)(words)[f'{word}'])对于word,在zip中计数(words,counts):print(f{word}\t{count}”)
这不是一回事吗?