如何用Python将colour's这类带撇号的词拆分为两个词统计词数?
问题分析与修正代码
你的代码存在几个关键问题:
- 正则表达式写法错误:
r'*.[["a-zA-Z"]]'完全不符合语法规则,*不能作为正则表达式的开头,嵌套括号和转义引号也都是无效写法。 - 错误地将文件对象传入
re.search,应该传入读取到的文本内容read而非text_file。 re.search仅返回第一个匹配结果,无法统计所有符合条件的情况,应使用re.findall或直接做文本替换处理。- 逻辑错误:直接拆分文本后累加匹配数的方式不准确,像
colour's原本算1个词,要拆成2个词,正确做法是先拆分这类结构再统计总数。
下面是修正后的代码,可实现将colour's这类词拆分为colour和s并统计词数:
import sys from pathlib import Path import re text_file = Path(sys.argv[1]) if text_file.exists() and text_file.is_file(): read = text_file.read_text() # 将"word's"这类结构替换为"word s",拆分撇号后的后缀 processed_text = re.sub(r"(\w)'(\w+)", r"\1 \2", read) # 按空白字符拆分后统计总词数 word_count = len(processed_text.split()) print(f'{text_file} 共有 {word_count} 个词') else: print(f'未找到文件: {text_file}')
代码说明
- 正则表达式
r"(\w)'(\w+)":匹配由撇号连接的字母/数字/下划线组合,第一个分组(\w)匹配撇号前的单词主体,第二个分组(\w+)匹配撇号后的后缀部分。 re.sub将匹配到的内容替换为\1 \2,把撇号替换成空格,实现词的拆分。- 最后用
split()按空白字符拆分文本,统计得到拆分后的总词数。
内容的提问来源于stack exchange,提问作者Vyshakh
相关产品推荐
相关产品推荐

