Python 计算字符串中单词的个数(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在文本处理和数据分析领域,"Python 计算字符串中单词的个数" 是一个基础但实用的技能。无论是统计文章中的关键词频率,还是分析用户评论的情感倾向,这类需求都要求开发者能够准确解析字符串中的单词边界。本文将从零开始,通过循序渐进的讲解,帮助编程初学者掌握多种实现方法,并为中级开发者提供优化思路。
什么是“单词”?定义与边界条件
在讨论具体实现之前,我们需要明确“单词”的定义。在自然语言处理中,单词通常指由字母组成的独立词汇单位,但实际场景中可能存在以下复杂情况:
- 分隔符差异:单词之间可能用空格、标点符号(如逗号、句号)或换行符分隔
- 特殊形式:带连字符的复合词(如 "well-known")、缩写(如 "Dr.")或带符号的单词(如 "Python3")
- 多语言支持:非拉丁字母语言(如中文)的单词边界规则不同
形象比喻:
可以把字符串想象成一串珠子,每个珠子代表一个单词。当我们需要计算珠子数量时,必须先确定哪些线段是分割点(空格、标点),而哪些符号是珠子本身的一部分(如连字符)。
方法一:使用 split() 方法基础实现
Python 的字符串方法 split()
是最直接的解决方案。默认情况下,它会将字符串按空格分割,并返回单词列表。
基础示例
text = "Hello world! This is a test."
words = text.split()
print("单词数量:", len(words)) # 输出:6
注意事项
- 连续空格处理:
split()
会自动忽略多个连续空格,将它们视为一个分隔符 - 标点符号问题:末尾的标点(如句号)会被包含在单词内,需额外处理
改进思路:
我们可以先移除标点符号,再进行分割。例如:
import string
text = "Hello, world! How's it going?"
clean_text = text.translate(str.maketrans("", "", string.punctuation))
words = clean_text.split()
print(len(words)) # 输出:6
方法二:正则表达式精准匹配
正则表达式(Regex)提供了更灵活的解决方案,可以定义复杂的单词模式。
核心正则表达式模式
r"\b\w+\b"
是一个常用模式,其中:
\b
表示单词边界(确保匹配完整单词)\w
表示字母、数字或下划线+
表示匹配一个或多个字符
代码实现
import re
text = "Python3 is fun! Let's code."
matches = re.findall(r"\b\w+\b", text)
print("单词数量:", len(matches)) # 输出:4
进阶调整
若需要包含连字符或撇号(如 "don't"、"well-known"),可扩展模式为:
pattern = r"\b[\w'-]+\b"
matches = re.findall(pattern, text)
边界情况处理:常见陷阱与解决方案
情况1:空字符串或全空格字符串
text = " "
print(len(text.split())) # 输出:0(正确)
print(len(re.findall(r"\b\w+\b", text))) # 输出:0
情况2:单词前后带标点
text = '"Hello" world.'
解决方案:结合 strip()
和 translate()
清理符号:
clean_text = text.strip(string.punctuation).translate(...)
性能对比与选择建议
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
split() + 清理 | 简单场景,无需处理复杂符号 | 代码简洁,执行速度快 | 需手动处理标点和特殊字符 |
正则表达式 | 需要精确匹配(如连字符、缩写) | 灵活度高,支持复杂模式 | 正则语法学习成本较高 |
进阶技巧:处理多行文本与文件输入
示例:统计文本文件中的单词数
def count_words(file_path):
with open(file_path, 'r') as file:
content = file.read()
words = re.findall(r"\b\w+\b", content)
return len(words)
print(count_words("sample.txt")) # 假设文件有 100 个单词 → 输出 100
中级开发者扩展:自定义分词逻辑
场景:处理带下划线的变量名
text = "Python is great for user_name and variable_200"
matches = re.findall(r"\b[\w_]+\b", text)
print(len(matches)) # 输出:5
场景:排除数字
pattern = r"\b[a-zA-Z]+\b"
总结
通过本文的讲解,我们掌握了两种核心方法(split()
和正则表达式)来实现 "Python 计算字符串中单词的个数"。选择具体方法时,需结合数据特点和精度要求:
- 简单场景:优先使用
split()
方法,配合符号清理 - 复杂场景:采用正则表达式,定义精确的匹配模式
编程的本质是解决问题,而文本处理正是 Python 的强项之一。希望读者能通过本文的案例和代码示例,逐步掌握字符串操作的核心技巧,并将其应用到实际项目中。