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  

注意事项

  1. 连续空格处理split() 会自动忽略多个连续空格,将它们视为一个分隔符
  2. 标点符号问题:末尾的标点(如句号)会被包含在单词内,需额外处理

改进思路
我们可以先移除标点符号,再进行分割。例如:

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 的强项之一。希望读者能通过本文的案例和代码示例,逐步掌握字符串操作的核心技巧,并将其应用到实际项目中。

最新发布