You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式生成英文首字母缩写时文本重复问题如何解决

问题原因及修正方案

错误原因

你对re.sub方法的传参逻辑理解有误:re.sub(匹配规则, 替换内容, 原字符串)中,如果替换内容传固定字符串,会把每一个匹配到的子串都替换成这个完整的固定字符串。
你的正则r'(\b\w)'可以匹配到Data的首字母D和Science的首字母S两个结果,你传入的替换内容是some_words.upper()生成的固定值DATA SCIENCE,替换逻辑如下:

  1. 原字符串第一个匹配到的D被替换为DATA SCIENCE,剩余未匹配的ata Science保留
  2. 后续匹配到的S被替换为DATA SCIENCE,剩余未匹配的cience保留
    最终拼接后就得到了你看到的重复输出DATA SCIENCEata DATA SCIENCEcience。

修正代码

场景1:预期输出全大写的DATA SCIENCE

如果不需要强制用正则,直接调用字符串内置方法即可:

some_words = 'Data Science'
print(some_words.upper())

如果必须通过正则实现,将替换内容改为lambda函数处理每个匹配结果即可:

import re
some_words = 'Data Science'
all_words_select = r'\b\w'
word_upper = re.sub(all_words_select, lambda match: match.group().upper(), some_words)
print(word_upper)

场景2:实现最初的首字母缩写生成需求(输入Data Science输出DS)

用re.findall匹配所有单词首字母后拼接转大写即可:

import re
some_words = 'Data Science'
# 提取所有单词首字母
first_letter_list = re.findall(r'\b\w', some_words)
# 转大写后拼接得到缩写
abbreviation = ''.join(first_letter_list).upper()
print(abbreviation)

内容的提问来源于stack exchange,提问作者DejaVu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:45:03