python - 如何使用此正则表达式删除空格?
问题描述
我得到一个文本(带有标点符号),我需要计算每个单词出现在其中的次数。我想这样做如下:我想将单词与其他字符分开,然后我想创建一个频率表。这是我的代码:
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
注意:输出中单词的顺序无关紧要,我不在乎它们是如何排序的。
解决方案
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})
推荐阅读
- android - 如何为不同的产品风格定义两个不同版本的字符串?
- blazor - 如何在 Blazor 中处理 dialog.onclose 事件
- mysql - 一组中第一行和第二行之间的 SQL 平均时间
- python - Python:如何在外部文件中保存和提取分数和数据并将它们分类为高分
- excel - NA() 函数返回 #### 而不是字符串 #N/A
- codenameone - 我在哪里可以获得 CN1 模拟器的 iPhone 11 皮肤?
- python - 关于使用描述符实现类型检查的困惑
- python - Python:对非常量和非增加信号进行上采样
- c++ - 为什么我不能明确地向 std::make_pair 提供元素类型?
- sql - 你能加入你使用`as`定义的变量名(在SQL中)