如何用Python生成含数字的字符串首字母缩写?以RCCS14需求为例
生成带数字保留的英文短语缩写词
我来帮你搞定这个缩写生成的问题!你想要把字符串 theatre = 'Regal Crown Center Stadium 14' 转换成RCCS14——也就是字母单词取首字母大写,数字部分完整保留对吧?看你之前试了几种方法都没达到预期,我来给你分析下问题,再给你靠谱的解决方案。
先说说你之前尝试的问题
- 第一个方法用
split()拆分后取每个单词首字母,会把14当成普通单词,只取第一个字符1,结果变成RCCS1,不符合要求; - 后面的正则尝试里,
(\w+ | \d{1,2})的空格是多余的,而且\w+本身已经包含数字,会把14识别为字母数字混合的单词,还是只取首字母1,同样不对。
正确的解决方案
这里有两种简单有效的方法,都能完美得到你想要的RCCS14:
方法一:拆分处理字母与数字
先把字符串拆成「纯字母单词」和「纯数字序列」两部分,然后分别处理:
import re theatre = 'Regal Crown Center Stadium 14' # 匹配所有纯字母单词或纯数字序列 parts = re.findall(r'[A-Za-z]+|\d+', theatre) # 遍历每个部分:字母取首字母大写,数字直接保留 acronym = ''.join(part[0].upper() if part.isalpha() else part for part in parts) print(acronym) # 输出:RCCS14
方法二:正则替换一步到位
用正则替换直接把每个字母单词替换成首字母,数字部分自动保留:
import re theatre = 'Regal Crown Center Stadium 14' # 匹配每个字母开头的单词,替换为首字母大写;数字不匹配规则,直接保留 acronym = re.sub(r'([A-Za-z])[A-Za-z]*\s*', lambda m: m.group(1).upper(), theatre) print(acronym) # 输出:RCCS14
解释下原理
- 方法一的正则
[A-Za-z]+|\d+会精准把字符串拆成字母块和数字块,比如拆成['Regal', 'Crown', 'Center', 'Stadium', '14'],然后对字母块取首字母,数字块全保留; - 方法二的正则
([A-Za-z])[A-Za-z]*\s*匹配每个字母单词(包括后面的空格),用lambda函数把它替换成单词的首字母大写,数字部分因为不匹配这个正则,所以原封不动留在结果里。
内容的提问来源于stack exchange,提问作者Shwtm3
相关产品推荐
相关产品推荐

