Google Sheets多词城市名提取大写首字母生成缩写的公式问题
多单词城市名首字母缩写实现方案
需求规则
- 多单词城市名:提取大写首字母,生成点号分隔的首字母缩写
- 单个单词城市名:保持原值不变
示例参考
输入
Rio de Janeiro São Paulo Osnabruck Brøndby County
对应输出
R.J. S.P. Osnabruck B.C.
现有实现卡点
已梳理基础实现逻辑:按空格拆分单词→移除拆分内容里的小写字母→用.拼接结果,初步公式如下:
=IF(FIND(" ",A1),JOIN(".",SPLIT(A1," ")),A1)
当前卡在移除小写字母步骤,已尝试的两种方案均存在缺陷:
- 用
SUBSTITUTE枚举所有小写字母替换为空:无法覆盖全量特殊小写字符(如北欧语的ø、葡萄牙语的ã等) - 用正则规则
[^a-z]匹配保留非小写字母:仅能覆盖a-z范围的英文字符,同样无法识别其他语言的小写变音字符,会有字符残留
适配全拉丁语系字符的实现方案
不需要逐一枚举小写字母,直接利用Unicode正则属性\p{Ll}即可匹配所有语言的小写Unicode字母,覆盖英语、葡萄牙语、北欧语等所有拉丁语系的带变音符号小写字符,不会出现字符残留。
适配Google Sheets的公式
=IF(COUNTIF(A1,"* *")=0,A1,JOIN(".",QUERY(ARRAYFORMULA(REGEXREPLACE(SPLIT(A1," "),"\p{Ll}","")),"SELECT * WHERE Col1 <> ''"))&".")
公式逻辑说明:
- 先用
COUNTIF判断单元格是否包含空格,无空格直接返回原城市名 - 有空格则先用
SPLIT按空格拆分为独立单词 - 用
REGEXREPLACE配合\p{Ll}规则,将每个单词里的所有小写字母替换为空,全小写的虚词(如de)会被替换为空值 - 用
QUERY过滤掉替换后产生的空值 - 用
.拼接剩余的大写首字母,末尾补.匹配输出格式
适配Excel 365的公式
=IF(ISERROR(FIND(" ",A1)),A1,TEXTJOIN(".",TRUE,REGEXREPLACE(TEXTSPLIT(A1," "),"\p{Ll}",""))&".")
逻辑和Sheets版本一致,用TEXTSPLIT做单词拆分,TEXTJOIN第二参数设为TRUE自动跳过空值,写法更简洁。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

