首页 > 解决方案 > 如何使用此正则表达式删除空格?

问题描述

我得到一个文本(带有标点符号),我需要计算每个单词出现在其中的次数。我想这样做如下:我想将单词与其他字符分开,然后我想创建一个频率表。这是我的代码:

import re
text=input("Input:")
space={''}
text=re.split("[. | , | ! | ?| |]", text)
sett=set(text)-space
frequency_table={}
for element in sett:
     frequency_table[element]=text.count(element)
print(frequency_table)

这可以解决问题,但我的问题是我无法找到一种方法让我的常规表达式从一开始就删除空格。我发现了这个非常奇怪的解决方案,但我不知道,它感觉不“正确”,应该有一种方法也可以使用该正则表达式删除空格。
编辑:这是一个示例输入和一个示例输出:

Input: Bob?...Bob has many, many apples!... But you, how many apples do you have?
Output: Bob:2
        has:1
        many:3
        apples:2
        But:1
        you:2
        how:1
        do:1
        have:1

注意:输出中单词的顺序无关紧要,我不在乎它们是如何排序的。

标签: pythonpython-3.xregexsplit

解决方案


Imo,您可以使用相反的方法-定义“单词”是什么并使用默认字典。这可能是:

import re
from collections import defaultdict

# pattern and container
rx = re.compile(r'\b[-\w]+\b')
dd = defaultdict(int)

text = "Bob?...Bob has many, many apples!... But you, how many apples do you have?"

for word in rx.finditer(text):
    dd[word.group(0)] += 1
    
print(dd)

这会导致

defaultdict(<type 'int'>, {'do': 1, 'many': 3, 'But': 1, 'how': 1, 'apples': 2, 'have': 1, 'Bob': 2, 'has': 1, 'you': 2})

推荐阅读